Ranking (as of 2015-05-08): 23 out of 175
Language: C++
/*
UVa 12319 - Edgetown's Traffic Jams
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_12319_Edgetowns_Traffic_Jams.cpp
*/
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <limits>
using namespace std;
void floyd_warshall(int n, vector< vector<int> >& matrix)
{
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
if (matrix[i][k] != numeric_limits<int>::max())
for (int j = 1; j <= n; j++)
if (matrix[k][j] != numeric_limits<int>::max())
matrix[i][j] = min(matrix[i][j], matrix[i][k] + matrix[k][j]);
}
int main()
{
while (true) {
string s;
getline(cin, s);
istringstream iss(s);
int n;
iss >> n;
iss.clear();
if (!n)
break;
vector< vector<int> >
matrix(n + 1, vector<int>(n + 1, numeric_limits<int>::max())),
pmatrix(n + 1, vector<int>(n + 1, numeric_limits<int>::max()));
for (int i = 0; i < n; i++) {
getline(cin, s);
iss.str(s);
int j, k;
iss >> j;
while (iss >> k)
matrix[j][k] = 1;
iss.clear();
}
for (int i = 0; i < n; i++) {
getline(cin, s);
iss.str(s);
int j, k;
iss >> j;
while (iss >> k)
pmatrix[j][k] = 1;
iss.clear();
}
int A, B;
getline(cin, s);
iss.str(s);
iss >> A >> B;
iss.clear();
floyd_warshall(n, matrix);
floyd_warshall(n, pmatrix);
bool yes = true;
for (int i = 1; i <= n && yes; i++)
for (int j = 1; j <= n && yes; j++)
if (i != j)
if (matrix[i][j] < numeric_limits<int>::max()) {
if (pmatrix[i][j] == numeric_limits<int>::max() ||
pmatrix[i][j] > matrix[i][j] * A + B)
yes = false;
}
cout << ((yes) ? "Yes\n" : "No\n");
}
return 0;
}
No comments:
Post a Comment