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 |
DFS版spfa 写丑了? 为啥比bfs spfa慢好多#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define inf 200000000 using namespace std; typedef struct{ int y,next,w; }node; node g[60000]; int v[6000],d[6000],a[6000]; int n,m,w,tot,flag; void Add(int u,int v,int w){ g[++tot].y=v;g[tot].w=w; g[tot].next=a[u];a[u]=tot; } void Init(){ int x,y,z; tot=0; memset(a,0,sizeof(a)); for(int i=1;i<=m+w;i++){ scanf("%d %d %d",&x,&y,&z); if(i<=m){ //printf("%d %d %d\n",x,y,z); Add(x,y,z); Add(y,x,z); }else Add(x,y,-z); } } void Dfs(int k){ int now; if(flag) return; v[k]=1; //printf("%d\n",k); for(int s=a[k];s;s=g[s].next){ now=g[s].y; if(d[now]>d[k]+g[s].w){ d[now]=d[k]+g[s].w; if(v[now]&&!flag){ printf("YES\n"); flag=1; }else{ v[now]=1; Dfs(now); } } } v[k]=0; } void Spfa(){ memset(v,0,sizeof(v)); for(int i=2;i<=n;i++) d[i]=inf; d[1]=0; Dfs(1); } int main(){ int T; freopen("test.in","r",stdin); scanf("%d",&T); while(cin>>n>>m>>w){ flag=0; Init(); Spfa(); if(!flag) printf("NO\n"); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator