範例程式碼 uva12319

//uva12319
#include<iostream>

using namespace std;

int v[105][105];
int fv[105][105];

int main(){
    
    int n;
    int A, B;
    int c, temp = 't';
    int f;
    int max;
    cin >> n;
    while (n != 0){
        for (int i = 0; i < 105; ++i)
            for (int j = 0; j < 105; ++j)
                v[i][j] = fv[i][j] = 65535;
        while(getchar() != '\n');
        for (int i = 0; i < 103; ++i)
            v[i][i]=fv[i][i]=1;
        for (int i = 1; i <= n; ++i){
            cin >> c;
            temp = cin.get();
            while(temp != '\n'){
                cin >> temp;
                v[c][temp]=1;
                temp = cin.get();
            }
        }
        for (int i = 1; i <= n; ++i){
            cin >> c;
            temp = cin.get();
            while(temp != '\n'){
                cin >> temp;
                fv[c][temp]=1;
                temp = cin.get();
            }
        }
        cin >> A;
        cin >> B;
        for (int k = 1; k <= n; ++k)
            for (int i = 1; i <= n; ++i)
                for (int j = 1; j <= n; ++j){
                    if (v[i][j] > v[i][k] + v[k][j])
                        v[i][j] = v[i][k] + v[k][j];
                    if (fv[i][j] > fv[i][k] + fv[k][j])
                        fv[i][j] = fv[i][k] + fv[k][j];
                }
        f = 1;
        max = 0;
        for (int i = 1; i <= n; ++i)
            for (int j = 1; j <= n; ++j){
                if (fv[i][j] > v[i][j] * A + B)
                    f = 0;
                if (max < v[i][j] && v[i][j] != 65535)
                    max = v[i][j];
            }
        if (f)
            cout << "Yes" << ' ' << max << endl;
        else
            cout << "No" << ' ' << max << endl;
        cin >> n;
    }
}