• POJ3259 SPFA判定负环


    原题链接:POJ3259

    解析:找了四五小时bug,打错俩个字母,想吃口屎冷静一下。

    代码示例:

    #include<iostream>
    #include<cstring>
    #include<queue>
    #include<cstdio>
    #include<vector>
    using namespace std;
    const int INF = 2e9;
    const int maxn = 1005;
    vector<int> G[maxn]; 
    struct Edge{
    	int from,to,dis;
    };
    vector<Edge> edges;
    int dist[maxn];
    bool vis[maxn];
    int cnt[maxn];
    int n;
    void add_edge(int from,int to,int dis){
    	edges.push_back(Edge{from,to,dis});
    	int m = edges.size()-1;
    	G[from].push_back(m);
    }
    void init(){
    	for(int i = 0;i < maxn;i++)
    		G[i].clear();
    	for(int i = 0;i < maxn;i++)
    		dist[i] = INF;
    	edges.clear();
    	memset(vis,false,sizeof vis);
    	memset(cnt,0,sizeof cnt);
    }
    bool spfa(int s){
    	dist[s] = 0;
    	queue<int> q;
    	q.push(s);
    	while(!q.empty()){
    		int x = q.front();
    		q.pop();
    		vis[x] = false;
    		for(int i = 0;i < G[x].size();i++){
    			Edge& e = edges[G[x][i]];
    			if(dist[e.to] > dist[x] + e.dis){
    				dist[e.to] = dist[x] + e.dis;
    				cnt[e.to] = cnt[x] + 1; 
    				if(cnt[e.to] >= n)	return false;
    				if(!vis[e.to])	q.push(e.to),vis[e.to] = true;
    			}
    		}
    	}
    	return true;
    }
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--){
    		init();
    		int m,w;
    		scanf("%d%d%d",&n,&m,&w);
    		for(int i = 0;i < m;i++){
    			int u,v,val;
    			scanf("%d%d%d",&u,&v,&val);
    			add_edge(u,v,val);
    			add_edge(v,u,val);
    		}
    		for(int i = 0;i < w;i++){
    			int u,v,val;
    			scanf("%d%d%d",&u,&v,&val);
    			add_edge(u,v,-val);
    		}	
    		if(spfa(1))	puts("NO");
    		else puts("YES");
    	}
    	return 0;
    } 
  • 相关阅读:
    PHP学习之路(六)
    PHP学习之路(五)
    PHP学习之路(四)
    PHP学习之路(三)
    PHP学习之路(二)
    PHP学习之路(一)
    webstrom运行出现404的解决办法
    适配移动端Swiper的3D旋转木马轮播~
    为什么觉得英文字体设计比中文字体设计来的好看?
    linux 部署系统通过SecureCRT启动tomcat 控制台中文乱码
  • 原文地址:https://www.cnblogs.com/long98/p/10352192.html
Copyright © 2020-2023  润新知