首页 > 其他 > 详细

[BZOJ1202][HNOI2005]狡猾的商人

时间:2019-07-25 21:56:14      阅读:79      评论:0      收藏:0      [点我收藏+]

Solution

   emmm……差分约束裸题。注意收入额有正有负,所以不要像我一样自作聪明连0边。。。

  还有,多组数据不清空,OI爆零见祖宗。。。

  Code

技术分享图片
#include<bits/stdc++.h>
using namespace std;
const int N=105,M=1005;
inline int read(){
    int x=0,w=0;char ch=0;
    while(!isdigit(ch)) w|=ch==-,ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return w?-x:x; 
}
struct edge{
    int v,w,last;
}e[M<<1];
int tot,tail[N];
inline void add(int x,int y,int z){
    e[++tot]=(edge){y,z,tail[x]};
    tail[x]=tot;
}
int t,n,m,d[N];
bool vis[N];
bool dfs_SPFA(int x){
    vis[x]=true;
    for(int p=tail[x];p;p=e[p].last){
        int &v=e[p].v,&w=e[p].w;
        if(d[x]+w<d[v]){
            d[v]=d[x]+w;
            if(vis[v]||!dfs_SPFA(v))
                return false;     
        }
    }
    vis[x]=false;
    return true;
}
bool check(){    
    memset(d,0,sizeof d);
    memset(vis,0,sizeof vis);
    for(int i=0;i<=n;++i)
        if(!dfs_SPFA(i)) return false;
    return true;
}
int main(){
    t=read();
    while(t--){    
        tot=0;memset(tail,0,sizeof tail);
        n=read(),m=read();
        while(m--){
            int x=read(),y=read(),z=read();//y,x-1
            add(y,x-1,-z),add(x-1,y,z);
        }
        //for(int i=0;i<n;++i) add(i+1,i,0);
        puts(check()?"true":"false");
    }
    return 0;
}
BZOJ1202

 

[BZOJ1202][HNOI2005]狡猾的商人

原文:https://www.cnblogs.com/gosick/p/11246892.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!