zoukankan      html  css  js  c++  java
  • POJ 1364 差分约束

    思路:
    把所有“>”变成“≥”
    把所有“<”变成“≤”

    (加一减一就好了)

    然后我们发现:图不一定连通!!

    怎么办呢

    对于每一个连通块SPFA就好了嘛……

    //By SiriusRen
    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define N 111
    using namespace std;
    char a[3],inq[N];
    int n,vis[N],xx,yy,zz,m,dis[N],cnt[N];
    int first[N],next[N*N],v[N*N],w[N*N],tot=0;
    void add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
    bool spfa(int x){
        memset(cnt,0,sizeof(cnt));
        memset(dis,0xcf,sizeof(dis));
        memset(inq,0,sizeof(inq));
        dis[x]=0;vis[x]=cnt[x]=1;
        queue<int>q;q.push(x);
        while(!q.empty()){
            int t=q.front();q.pop();
            inq[t]=0;vis[t]=1;
            for(int i=first[t];~i;i=next[i])
                if(dis[v[i]]<dis[t]+w[i]){
                    dis[v[i]]=dis[t]+w[i];
                    if(!inq[v[i]]){
                        inq[v[i]]=1;
                        cnt[v[i]]++;q.push(v[i]);
                        if(cnt[v[i]]>n)return 0;
                    }
                }
        }
        return 1;
    }
    int main(){
        scanf("%d",&n);
        start:memset(first,-1,sizeof(first));
        memset(vis,0,sizeof(vis));
        scanf("%d",&m);
        for(int i=1;i<=m;i++){
            scanf("%d%d%s%d",&xx,&yy,a,&zz);
            if(a[0]=='g')add(xx-1,xx+yy,zz+1);
            else add(xx+yy,xx-1,-zz+1);
        }
        for(int i=0;i<=n;i++){
            if(vis[i])continue;
            if(!spfa(i)){
                puts("successful conspiracy");
                goto end;
            }
        }
        puts("lamentable kingdom");
        end:if(scanf("%d",&n)&&n)goto start;
    }

    这里写图片描述

  • 相关阅读:
    如何用VSCode编写Java程序
    使用Xcode + Python进行IOS运动轨迹模拟
    聚类(Clustering)
    异常值(outlier)
    线性回归(regression)
    自适应增强(Adaptive Boosting)
    决策树(Decision Trees)
    支持向量机(SVM)
    朴素贝叶斯(Naive Bayesian)
    ItChat与图灵机器人的结合
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532318.html
Copyright © 2011-2022 走看看