tkj
文章143
标签102
分类0
bzoj 3436: 小K的农场

bzoj 3436: 小K的农场

.

题意:自己看。
题解:裸差分约束。

#include<bits/stdc++.h>
using namespace std;

int n,m,v[10010],dis[10010],num=0,fst[10010];
struct edge
{
    int x,y,c,n;
}e[20010];
bool tf=0;

void ins(int x,int y,int c)
{
    e[++num]={x,y,c,fst[x]};
    fst[x]=num;
}
void dfs(int x)
{
    if(v[x])
    {
        tf=1;
        return;
    }
    v[x]=1;
    for(int i=fst[x];i;i=e[i].n)
    {
        int y=e[i].y;
        if(dis[y]>dis[x]+e[i].c)
        {
            dis[y]=dis[x]+e[i].c;
            dfs(y);
            if(tf)
            break;
        }
    }
    v[x]=0;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        int op,a,b,c;
        scanf("%d%d%d",&op,&a,&b);
        if(op==1)
        {
            scanf("%d",&c);
            ins(a,b,-c);
        }
        else if(op==2)
        {
            scanf("%d",&c);
            ins(b,a,c);
        }
        else
        {
            ins(a,b,0);
            ins(b,a,0);
        }
    }
    memset(dis,0,sizeof(dis));
    memset(v,0,sizeof(v));
    for(int i=1;i<=n;i++)
    {
        dfs(i);
        if(tf)
        break;
    }
    if(tf)
    puts("No");
    else
    puts("Yes");
}
本文作者:tkj
本文链接:https://tkj666.github.io/58/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可