| ||||||||||
| 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 | |||||||||
SPFA判正环 20分钟AC。。。#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
#include <map>
using namespace std;
#define N 35
#define inf 999999999
struct node{
int y;
double r;
};
map<string,int>ma;
vector<node>ve[N];
int visited[N];
double dis[N];
int up[N];
int n;
int SPFA(int u){
memset(visited,0,sizeof(visited));
memset(dis,0,sizeof(dis));
memset(up,0,sizeof(up));
int i, j, k, v;
node p, q;
queue<int>Q;
Q.push(u);
visited[u]=1;
dis[u]=1000;
while(!Q.empty()){
v=Q.front();
Q.pop();
visited[v]=0;
for(i=0;i<ve[v].size();i++){
p=ve[v][i];
if(dis[p.y]<dis[v]*p.r){
dis[p.y]=dis[v]*p.r;
if(!visited[p.y]){
visited[p.y]=1;
Q.push(p.y);
}
up[p.y]++;
if(up[p.y]>=n) return 1;
}
}
}
return 0;
}
main()
{
int i, j, k, m, x, y, kase=1;
double z;
string s1, s2;
node p;
while(scanf("%d",&n)==1&&n){
ma.clear();
k=1;
for(i=1;i<=n;i++){
ve[i].clear();
cin>>s1;
ma[s1]=k++;
}
scanf("%d",&m);
while(m--){
cin>>s1>>z>>s2;
x=ma[s1];
p.y=ma[s2];p.r=z;
ve[x].push_back(p);
}
int f=0;
for(i=1;i<=n;i++){
if(SPFA(i)){
f=1;printf("Case %d: Yes\n",kase++);break;
}
}
if(!f) printf("Case %d: No\n",kase++);
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator