• [HNOI2005] 狡猾的商人


    本来是要做带权并查集才跳到这个题上的。。。但是最后懒省事写了一个差分约束。。。。唉

    题解嘛——这题就是普通的差分约束吧??

    不会差分约束的话,可以看一下这篇博客,写的很详细很周全。

    注意图可能不联通,这个时候要进行多遍spfa。而且注意同一组数据的话不用每次spfa都初始化!!!

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #define MAXN 10010
    using namespace std;
    int T,n,m,s,t,v,edge_number;
    int head[MAXN],dis[MAXN],done[MAXN],len[MAXN];
    struct Edge{int nxt,to,dis;}edge[MAXN<<1];
    inline void add(int from,int to,int dis)
    {
    	edge[++edge_number].dis=dis;
    	edge[edge_number].to=to;
    	edge[edge_number].nxt=head[from];
    	head[from]=edge_number;
    }
    inline bool spfa(int x)
    {
    	queue<int>q;
    	q.push(x); done[x]=1; dis[x]=0;
    	while(!q.empty())
    	{
    		int u=q.front();
    		q.pop(); done[u]=0;
    		for(int i=head[u];i;i=edge[i].nxt)
    		{
    			int v=edge[i].to;
    			if(dis[v]>dis[u]+edge[i].dis)
    			{
    				dis[v]=dis[u]+edge[i].dis;
    				if(!done[v])
    				{
    					done[v]=1;
    					len[v]=len[u]+1;
    					if(len[v]>=n)
    						return false;
    					q.push(v);
    				}
    			}
    		}
    	}
    	return true;
    }
    int main()
    {
    	scanf("%d",&T);
    	while(T--)
    	{
    		memset(done,0,sizeof(done));
    		memset(dis,0x3f,sizeof(dis));
    		memset(len,0,sizeof(len));
    		memset(edge,0,sizeof(edge));
    		memset(head,0,sizeof(head));
    		bool flag=true;
    		edge_number=0;
    		scanf("%d%d",&n,&m);
    		for(int i=1;i<=m;i++)
    		{
    			scanf("%d%d%d",&s,&t,&v);
    			add(t,s-1,v);
    			add(s-1,t,-v);	
    		}
    		for(int i=0;i<=n;i++)
    			if(!len[i])
    				if(spfa(i)==false)
    				{
    					printf("false
    ");
    					flag=false;
    					break;
    				}
    		if(flag==true)
    			printf("true
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    Qt画笔实现折线图
    Qt动态布局
    ffmpeg录制流媒体,正常方式停止录制
    解决libvlc_media_player_stop时死锁的方法
    Ubuntu 16 修改时区!
    qt窗口最小化之后无法打开
    Qt 之 去除窗口部件被选中后的焦点虚线框
    WINDOWS中, 如何查看一个运行中的程序是64位还是32位的
    DHTMLX学习总结
    mui plus.uploader.createUpload 上传文件服务端获取文件名中文乱码问题
  • 原文地址:https://www.cnblogs.com/fengxunling/p/9930396.html
Copyright © 2020-2023  润新知