zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 沈阳赛区网络预赛 F Fantastic Graph(贪心或有源汇上下界网络流)

    https://nanti.jisuanke.com/t/31447

    题意

    一个二分图,左边N个点,右边M个点,中间K条边,问你是否可以删掉边使得所有点的度数在[L,R]之间

    分析

    最大流不太会。。

    贪心做法:

    考虑两个集合A和B,A为L<=d[i]<=R,B为d[i]>R

    枚举每个边

    1.如果u和v都在B集合,直接删掉
    2.如果u和v都在A集合,无所谓
    3.如果u在B,v在A,并且v可删边即d[v]>L
    4.如果u在A,v在B,并且u可删边即d[u]>L

    最后枚举N+M个点判断是否在[L,R]之间

    正解是有汇源上下界网络流,待补

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn=6005;
    
    int main()
    {
        int N,M,K,L,R,o=1,u[maxn],v[maxn],d[maxn];
        while(scanf("%d%d%d",&N,&M,&K)!=EOF)
        {
            memset(d,0,sizeof d);
            scanf("%d%d",&L,&R);
            int sum=0,flag=1;
            for(int i=0;i<K;i++)
            {
                scanf("%d%d",&u[i],&v[i]);v[i]+=N;
                d[u[i]]++,d[v[i]]++;
            }
            for(int i=0;i<K;i++)
            {
                int uu=u[i],vv=v[i];
                if(d[uu]>R&&d[vv]>R)d[uu]--,d[vv]--;
                else if(L<=d[uu]&&d[uu]<=R&&L<=d[vv]&&d[vv]<=R)continue;
                else if(L+1<=d[uu]&&d[uu]<=R&&d[vv]>R)d[uu]--,d[vv]--;
                else if(d[uu]>R&&L+1<=d[vv]&&d[vv]<=R)d[uu]--,d[vv]--;
            }
            for(int i=1;i<=N+M;i++)if(d[i]<L||d[i]>R)flag=0;
            printf("Case %d: %s
    ",o++,flag?"Yes":"No");
        }
        return 0;
    }
  • 相关阅读:
    hdu 5171(矩阵快速幂,递推)
    hdu 1316(大整数)
    hdu 5170(数学)
    hdu 5167(dfs)
    hdu 5166(水题)
    hdu 5720(贪心+区间合并)
    BestCoder 2nd Anniversary的前两题
    hdu 3065(AC自动机)
    2.3绘制构造线与射线
    查找ARP攻击源
  • 原文地址:https://www.cnblogs.com/fht-litost/p/9676615.html
Copyright © 2011-2022 走看看