zoukankan      html  css  js  c++  java
  • 最短路模板负环

    题目

    P3385 【模板】负环

    细节

    判负环时不要用deque,否则会wa一个点

    WA掉的数据

    洛谷数据#9
    正确输出:NO

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=2e6+10,maxm=1e6+10;
    int head[maxn],ver[maxm],edge[maxm],Next[maxm],tot;
    void add(int x,int y,int z){
    	ver[++tot]=y,edge[tot]=z,Next[tot]=head[x],head[x]=tot;
    }
    int t,n,m;
    queue<int>q;
    int vis[maxn],dis[maxn],cnt[maxn];
    bool spfa(int s){
    	memset(cnt,0,sizeof(cnt));
    	memset(dis,0x3f,sizeof(dis));
    	memset(vis,0,sizeof(vis));
    	q.push(s);
    	vis[s]=1,dis[s]=0;
    	cnt[s]++;
    	while(!q.empty()){
    		int u=q.front();q.pop();
    		vis[u]=0;
    		for(int i=head[u];i;i=Next[i]){
    			int v=ver[i];
    			if(dis[v]>dis[u]+edge[i]){
    				dis[v]=dis[u]+edge[i];
    				if(!vis[v]){
    					cnt[v]++;
    					if(cnt[v]>n+1){
    						return 1;
    					}
    					vis[v]=1;
    					q.push(v);
    				}
    			}
    		}
    		
    	}
    	return 0;
    } 
    void Init(){
    	tot=0;
    	memset(head,0,sizeof(head));
    	memset(ver,0,sizeof(ver));
    	memset(Next,0,sizeof(Next));
    	memset(edge,0,sizeof(edge));
    }
    int main(){
    	freopen("P3385_9.in","r",stdin);
    	scanf("%d",&t);
    	while(t--){
    		Init();
    		scanf("%d%d",&n,&m);
    		int x,y,z;
    		bool flag=0;
    		for(int i=1;i<=m;i++){
    			scanf("%d%d%d",&x,&y,&z);
    			if(z>=0)add(x,y,z),add(y,x,z);
    			else{
    				add(x,y,z);
    				flag=1;	
    			}
    		}
    		if(flag==0||!spfa(1)){
    			printf("NO
    ");
    		}else printf("YES
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    linux下的防火墙iptables
    oracle 学习
    关于测试计划制定
    Android APP性能测试笔记(一)
    adb报错问题解决方法
    Android studio安装与配置
    领导能力与领导力
    ADB安装及使用
    Advanced-REST-client
    性能测试体系-测试分析及调优
  • 原文地址:https://www.cnblogs.com/soda-ma/p/13280878.html
Copyright © 2011-2022 走看看