题解:

网络流

判断是否为漫流

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
const int INF=1e9,N=,M=,FIN=;
typedef long long ll;
int n,m,s,t,sum,ec,head[N],first[N],que[N],lev[N],Next[M],to[M],v[M];
void init()
{
sum=ec=;
memset(first,-,sizeof(first));
s=,t=FIN;
}
void addEdge(int a,int b,int c)
{
to[ec]=b;
v[ec]=c;
Next[ec]=first[a];
first[a]=ec++;
to[ec]=a;
v[ec]=;
Next[ec]=first[b];
first[b]=ec++;
}
int BFS()
{
int kid,now,f=,r=;
memset(lev,,sizeof(lev));
que[]=s,lev[s]=;
while (f<r)
{
now=que[f++];
for (int i=first[now];i!=-;i=Next[i])
{
kid=to[i];
if (!lev[kid]&&v[i])
{
lev[kid]=lev[now]+;
if (kid==t)return ;
que[r++]=kid;
}
}
}
return ;
}
int DFS(int now, int sum)
{
int kid,flow,rt=;
if (now==t) return sum;
for (int i=head[now];i!=-&&rt<sum;i=Next[i])
{
head[now]=i;
kid=to[i];
if (lev[kid]==lev[now]+&&v[i])
{
flow=DFS(kid,min(sum-rt,v[i]));
if (flow)
{
v[i]-=flow;
v[i^]+=flow;
rt+=flow;
}
else lev[kid]=-;
}
}
return rt;
}
int dinic()
{
int ans=;
while (BFS())
{
for (int i=;i<=t;i++)head[i]=first[i];
ans+=DFS(s,INF);
}
return ans;
}
void input()
{
int Min=INF,Max=;
scanf("%d%d",&n,&m);
int a,b,c;
for (int i=;i<=n;i++)
{
scanf("%d%d%d",&a,&b,&c);
sum+=a;
addEdge(s,i,a);
for (int j=b;j<=c;j++)addEdge(i,j+n,);
if (c<b)swap(c,b);
if (Min>b)Min=b;
if (Max<c)Max=c;
}
for (int i=Min;i<=Max;i++)addEdge(i+n,t,m);
}
int main()
{
int T,Case=;
scanf("%d",&T);
while (T--)
{
printf("Case %d: ",Case++);
init();
input();
if (dinic()==sum) puts("Yes");
else puts("No");
puts("");
}
return ;
}

最新文章

  1. Linux定时任务
  2. 可爱的Python_课后习题_CDay0 时刻准备着!发布
  3. linux查找进程,查找僵死进程,查找僵死进程并自动杀掉
  4. js 浏览器兼容的一些方法
  5. (Hibernate进阶)Hibernate基本原理(一)
  6. 百度或者Google---SEO优化(转载)
  7. 【java】 java 集合类UML图
  8. EditorWindow 和MenuItem
  9. Wireshark - 过滤规则
  10. 余弦距离、欧氏距离和杰卡德相似性度量的对比分析 by ChaoSimple
  11. 新学了一个用python编写的简单的百度贴吧帖子的爬虫
  12. uva 12627
  13. ubuntu环境ceph配置入门(一)
  14. 面向对象之七大基本原则(javaScript)
  15. Main Steps to Setup an ODI data sync
  16. MySQL中间件之ProxySQL(4):多层配置系统
  17. 手动实现Promise
  18. Rabbit五种消息队列学习(二) – 简单队列
  19. 实现div里的img图片水平垂直居中
  20. 4.3 if-else语句使用

热门文章

  1. Git学习-->GitLab如何修改时区?
  2. 使用dockerfile 创建ubuntu ssh镜像
  3. arc 和 非arc兼容
  4. java-mybaits-00102-mybatis框架原理
  5. Linux安装rpm包时报错Header V3 DSA/SHA1 Signature, key ID 1d1e034b: NOKEY解决办法
  6. MongoDB之Replica Set(复制集复制)
  7. 离线安装Cloudera Manager5.2.0和CDH5 2.0
  8. The Road to Ryu: Hi Ryu
  9. JDK 1.8 ConcurrentHashMap 源码剖析
  10. 51Nod 1686 第K大区间(离散化+尺取法)