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水过普通边是双向的,虫洞的边的单向……………… 初入SPFA,没想到从u到v可以有双向边+单向边……还是需要练啊 基本想法:SPFA判断负环即可。 贴个代码: #include<iostream> #include<algorithm> #include<queue> #define MAX_NODE 5200 #define MAX_EDGE 10086 using namespace std; class EDGE { public : int V,Next,Weight; EDGE():V(0),Next(0),Weight(0){} }Edge[MAX_EDGE]; int Head[MAX_NODE],K = 0; bool SPFA(int Sta,int CountNode); void AddEdge(int u,int v,int weight); int main(void) { int T = 0; cin>>T; while(T --) { memset(Head,-1,sizeof(Head)); K = 0; int P = 0,E = 0,W = 0; scanf("%d %d %d",&P,&E,&W); for(int i = 0;i < E;i ++) { int U = 0,V = 0,Weight = 0; scanf("%d %d %d",&U,&V,&Weight); AddEdge(U,V,Weight); AddEdge(V,U,Weight); } for(int i = 0;i < W;i ++) { int U = 0,V = 0,Weight = 0; scanf("%d %d %d",&U,&V,&Weight); AddEdge(U,V,0 - Weight); } /*bool Flag= true; for(int i = 1;i <= P;i ++) { if(SPFA(i,P)) { printf("YES\n"); Flag = false; break; } } if(Flag) printf("NO\n");*/ if(SPFA(1,P)) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; } bool SPFA(int Sta,int CountNode) { queue<int>Que; bool Visit[MAX_NODE]; int Dist[MAX_NODE]; int Count[MAX_NODE]; memset(Count,0,sizeof(Count)); memset(Visit,true,sizeof(Visit)); memset(Dist,0x3f,sizeof(Dist)); Dist[Sta] = 0,Visit[Sta] = false; Que.push(Sta);Count[Sta] ++; while(! Que.empty()) { int Front = Que.front(); Que.pop(); Visit[Front] = true; for(int i = Head[Front];i != -1;i = Edge[i].Next) { int Temp = Edge[i].V; if(Dist[Temp] > Dist[Front] + Edge[i].Weight) { Dist[Temp] = Dist[Front] + Edge[i].Weight; if(Visit[Temp]) { Count[Temp] ++; Visit[Temp] = false; Que.push(Temp); if(Count[Temp] >= CountNode) return true; } } } } return false; } void AddEdge(int u,int v,int weight) { Edge[K].V = v; Edge[K].Weight = weight; Edge[K].Next = Head[u]; Head[u] = K ++; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator