zoukankan      html  css  js  c++  java
  • 洛谷1525关押罪犯——二分

    题目:https://www.luogu.org/problemnew/show/P1525

    二分答案+二分图染色。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    int n,m,head[20005],xnt,x,y;
    ll ans,l,r,z;
    bool vis[20005],col[20005];
    struct Node{
        int next,to;
        ll c;
    }edge[200005];
    void add(int x,int y,ll z)
    {
        edge[++xnt].next=head[x];
        edge[xnt].to=y;
        edge[xnt].c=z;
        head[x]=xnt;
    }
    bool dfs(int a,ll mid)
    {
        for(int j=head[a],v;j;j=edge[j].next)
            if(edge[j].c>mid)
            {
                v=edge[j].to;
                if(vis[v]&&col[a]==col[v])return false;
                if(vis[v])continue;
                vis[v]=1;
                col[v]=(col[a]+1)%2;
                if(!dfs(v,mid))return false;
            }
        return true;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%lld",&x,&y,&z);
            add(x,y,z);add(y,x,z);
            r=max(r,z);
        }
        while(l<=r)
        {
            memset(col,0,sizeof col);
            memset(vis,0,sizeof vis);
            ll mid=(l+r)/2;
    //        printf("(%lld)
    ",mid);
            bool flag=0;
            for(int i=1;i<=n;i++)
                if(!vis[i])
                {
                    vis[i]=1;col[i]=1;
                    if(!dfs(i,mid))
                    {
                        flag=1;break;
                    }
                }
            if(flag)l=mid+1;
            else ans=mid,r=mid-1;
    //        printf("(l=%lld r=%lld)
    ",l,r);
        }
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    nginx
    spring 学习
    mysql 免安装 操作
    院感干预 报错
    iis 无法绑定 net.tcp
    wangEditor 自定义 菜单
    院感干预 发布
    第17篇 shell编程基础(2)
    第16篇 Shell脚本基础(一)
    第15篇 PSR-04 规范
  • 原文地址:https://www.cnblogs.com/Zinn/p/8521886.html
Copyright © 2011-2022 走看看