zoukankan      html  css  js  c++  java
  • 差分约束之狡猾的商人

    题目

    狡猾的商人

    思路

    用spfa求解,查询当前是否合法,正向加正边,反向加反边。记得判负环。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxm=500+10,maxn=4000+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 read(){
        char c=getchar();
        int x=0,f=1;
        while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
        while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
        return x*f;
    }
    int vis[maxn],dis[maxn];
    int cnt[maxn];
    bool flag=0;int n;
    void spfa(int s){
    	queue<int>q;
        memset(dis,0x3f,sizeof(dis));
        memset(vis,0,sizeof(vis));
        memset(cnt,0,sizeof(cnt));
        dis[s]=0,vis[s]=1;
    	q.push(s);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]++;
    					q.push(v);
    					vis[v]=1;
    					if(cnt[v]>n+1){
    						flag=1;
    						return;
    					}
    				}
    			}
    		}
    	
    	}
    }
    
    int main(){
    	int t;t=read();
    	for(int tt=1;tt<=t;tt++){
    		tot=0;
    		memset(head,0,sizeof(head));
    		int m;
    		n=read(),m=read();
    		for(int i=1;i<=m;i++){
    			ver[i]=0,edge[i]=0,Next[i]=0;	
    		}
    		n++;flag=0;
    		for(int i=1;i<=m;i++){
    			int l,r,w;
    			l=read(),r=read(),w=read();
    			r++;
    			spfa(l);
    			if(flag==1){
    				printf("false
    ");
    				break;
    			}
    			if(dis[r]>=1061109567){
    				add(l,r,w);
    				add(r,l,-w);
    			}
    			else{
    				if(dis[r]!=w){
    					printf("false
    ");
    					flag=1;
    					break;			
    				}
    			}
    		}
    		if(!flag)printf("true
    ");
    	}
    }
    
    
  • 相关阅读:
    Angularjs演示Service功能
    初始化应用程序数据ng-init指令
    AngularJs的ng-include的使用与实现
    把视图转换为字符串
    学习angularjs的内置API函数
    AngularJs自定义过滤器filter
    ASP.NET MVC的切片(Section)脚本(script)
    在ASP.NET MVC部署AngularJs
    MS SQL的某一数据库成了Single User模式
    AngularJs的MVC模式
  • 原文地址:https://www.cnblogs.com/soda-ma/p/13274229.html
Copyright © 2011-2022 走看看