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,为什么我开的数组大小不同,结果不同#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<cstring> using namespace std; #define M 5205 //ac //#define M 3000 runtime error //#define M 5000 wrong answer #define N 505 struct node { int p,next,dis; } g[M]; int n,m,w,cnt[N],inq[N],head[N],dis[N],k; void addEdge(int s,int d,int dist) { g[k].p=d; g[k].dis=dist; g[k].next=head[s]; head[s]=k++; } bool spfa(int s) { memset(dis,0x3f3f3f3f,sizeof(dis)); memset(inq,0,sizeof(inq)); memset(cnt,0,sizeof(cnt)); queue<int> q; q.push(s); cnt[s]=1; inq[s]=1; while(!q.empty()) { int t=q.front(); q.pop(); inq[t]=0; for(int i=head[t],p; i!=-1; i=g[i].next) { p=g[i].p; if(dis[p]>dis[t]+g[i].dis) { dis[p]=dis[t]+g[i].dis; if(!inq[p]) { q.push(p); inq[p]=1; if(++cnt[p]>n) return true; } } } } return false; } int main() { freopen("in.txt","r",stdin); int f; cin>>f; while(f--) { cin>>n>>m>>w; memset(head,-1,sizeof(head)); k=0; for(int i=0,a,b,d; i<m; i++) { scanf("%d%d%d",&a,&b,&d); addEdge(a,b,d); addEdge(b,a,d); } for(int i=0,a,b,d; i<w; i++) { scanf("%d%d%d",&a,&b,&d); addEdge(a,b,-d); } int ok=0; for(int i=1; i<=n; i++) { if(spfa(i)) { ok=1; break; } } if(ok) cout<<"YES\n"; else cout<<"NO\n"; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator