博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM-ICPC 2018 沈阳赛区网络预赛 F Fantastic Graph(贪心或有源汇上下界网络流)
阅读量:6959 次
发布时间:2019-06-27

本文共 955 字,大约阅读时间需要 3 分钟。

题意

一个二分图,左边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
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
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]
R)flag=0; printf("Case %d: %s\n",o++,flag?"Yes":"No"); } return 0;}

 

转载于:https://www.cnblogs.com/fht-litost/p/9676615.html

你可能感兴趣的文章
第一个微信小项目
查看>>
OpenGL Windows 窗口程序环境搭建
查看>>
OpenCV 透视变换实例
查看>>
hdu1251(Trie树)
查看>>
VS2010中的sln,suo分别是什么文件
查看>>
Ubuntu gcc错误:对'log'等函数未定义的引用
查看>>
C++之Lambda研究
查看>>
Python获得一个url最后一个/后的字符串
查看>>
if 嵌套题
查看>>
关于面对对象和正则表达式的处理
查看>>
解决粘包问题-简单版
查看>>
UVA 10635 Prince and Princess LCS转LIS
查看>>
生产消费者队列(TaskCompletionSource)的应用
查看>>
oracle之 获取建表ddl语句
查看>>
大型网站架构系列:分布式消息队列(一)
查看>>
有效地解决低阶矩阵完全问题
查看>>
ADB not responding. You can wait more,or kill"abd.exe" process manually and click 'Restart'
查看>>
四种有能力取代Cookies的客户端Web存储方案
查看>>
在idea中为类和方法自动生成注释
查看>>
流相关的操作方法封装
查看>>