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 |
Re:SPFA判正环 20分钟AC。。。In Reply To:SPFA判正环 20分钟AC。。。 Posted by:1012662902 at 2014-09-11 21:19:56 > #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