| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
可以帮忙看看慢在什么地方么?还是算法不对。晕死了,一直超时。难道是不能用cin或是string?
#include <iostream>
#include <string>
using namespace std;
int const maxv = 32;
struct enode{
int a, b;
double c;
};
enode e[10000];
string c[maxv];
int a[maxv][maxv];
int tmp[maxv];
double dist[maxv];
bool bellman_ford(int n, int m){
for (int i = 0; i < n; i++) dist[i] = 1;
for (int j = 0; j <= n; j ++ ){
int p = 0;
for (int i = 0; i < m; i++) {
double temp = dist[e[i].a] * e[i].c;
if (dist[e[i].a] * e[i].c > dist[e[i].b])
dist[e[i].b] = dist[e[i].a] * e[i].c , p = 1;
}
if (p == 0) return false;
}
return true;
}
int main(){
int n, tt = 0;
while (cin >> n, n!=0){
tt++;
for (int i = 0; i < n; i++) cin >> c[i];
int m;
cin >> m; int l = 0;
for (int i = 0; i < m; i++) {
memset(a, 0, sizeof(a));
string s1, s2;
int x, y; double p;
cin >> s1 >> p >> s2;
for (int j = 0; j < n; j++) if (s1 == c[j]) {x = j; break;}
for (int j = 0; j < n; j++) if (s2 == c[j]) {y = j; break;}
if (a[x][y] > 0){ // Keep the max cost
int k = a[x][y];
if (e[k].c < p) e[k].c = p;
} else {
e[l].a = x; e[l].b =y; e[l].c = p;
a[x][y] = l;
l++;
}
}
cout << "Case " <<tt << ": " <<( bellman_ford(n, l)? "Yes" : "No") << endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator