zoukankan      html  css  js  c++  java
  • SPFA判负环

    其实也没什么好说的

    反正两种判断方式

    要么路径长超过n,要么一个点入队次数大于n

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,cnt,adj[1005],nxt[100005],fuc[1005][1005],to[100005],str,val[100005],dis[1005],num[1005];
    bool vis[1005];
    inline int read(){
    	char ch=getchar();
    	int res=0,f=1;
    	while(!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();}
    	while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
    	return res*f;
    }
    inline void addedge(int u ,int v,int w){
    	nxt[++cnt]=adj[u],adj[u]=cnt,to[cnt]=v,val[cnt]=w;
    }
    inline bool spfa(int s){
    	memset(dis,127/3,sizeof(dis));
    	memset(vis,false,sizeof(vis));
    	memset(num,0,sizeof(num));
    	queue<int> q;
    	q.push(s),vis[s]=true,dis[s]=0,num[s]=1;
    	while(!q.empty()){
    		int u=q.front();
    		q.pop();vis[u]=false;
    		for(int e=adj[u];e;e=nxt[e]){
    			int v=to[e];
    			if(dis[u]+val[e]<dis[v]){
    					num[v]=num[u]+1;	
    				if(num[v]>=n) return false;	
    				dis[v]=dis[u]+val[e];
    				if(!vis[v]){
    					q.push(v);
    
    					vis[v]=true;
    				}
    			}
    		}
    
    	}
    	return true;
    }
    int main(){
    	n=read(),m=read(),str=read();
    	for(int i=1;i<=m;i++){
    		int u=read(),v=read(),w=read();
    		addedge(u,v,w);
    	}
    	if(spfa(str)==false){
    		cout<<"Zerg!"<<'
    ';
    		return 0;
    	}
    	for(int i=1;i<=n;i++){
    		if(dis[i]==707406378){
    			cout<<"NoPath"<<'
    ';
    		}
    		else cout<<dis[i]<<'
    ';
    	}
    	return 0;
    }
    
  • 相关阅读:
    logback.xml
    logback:RollingFileAppender
    logback :<include>
    logback:参数化日志打印
    logback:fileAppender输出到文件
    logback:root和logger
    logback console控制台输出
    logback encoder详细设置
    logback关闭日志
    IDEA+testng,输出没有test-output目录
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366454.html
Copyright © 2011-2022 走看看