要补的题太多了导致最近没写博客(好吧是我懒)

题目链接https://nanti.jisuanke.com/t/31447

题意

给出一个二分图,问能否挑选出一些边,使得每个点的度数都在[L,R]这个范围以内。

分析

标签是easy。只要会上下界网络流应该都能写出来。

开一个源点s和一个汇点t,对于每个N点,从s连一条[L,R]的边,对于每一个M点,连向t一条[L,R]的边,对于图中原本的NM之间的边,连一条[0,1]的边,然后跑有源汇点有上下界的网络流就可以。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue> using namespace std;
const int INF=;
const int maxn=+;
const int maxm=+;
struct Dinic{
int n,m,s,t,sz;
int head[maxn],Next[maxm*],to[maxm*],cap[*maxm],flow[*maxm];
int vis[maxn],d[maxn],cur[maxn];
void init(int n){
this->n=n;
sz=-;
memset(head,-,sizeof(head));
}
void add_edge(int a,int b,int c){
++sz;
to[sz]=b;cap[sz]=c;flow[sz]=;
Next[sz]=head[a];head[a]=sz;
++sz;
to[sz]=a;cap[sz]=c;flow[sz]=c;
Next[sz]=head[b];head[b]=sz;
}
bool BFS(){
memset(vis,,sizeof(vis));
queue<int>q;
vis[s]=;q.push(s);
d[s]=;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head[u];i!=-;i=Next[i]){
int v=to[i];
if(!vis[v]&&cap[i]>flow[i]){
vis[v]=;
d[v]=d[u]+;
q.push(v);
}
}
}
return vis[t];
}
int DFS(int x,int a){
if(x==t||a==)return a;
int Flow=,f;
for(int &i=cur[x];i!=-;i=Next[i]){
int v=to[i];
if(d[v]==d[x]+&&(f=DFS(v,min(a,cap[i]-flow[i])))>){
Flow+=f;
flow[i]+=f;
flow[i^]-=f;
a-=f;
if(a==)break;
}
}
return Flow;
}
int Maxflow(int s,int t){
this->s=s,this->t=t;
int Flow=;
while(BFS()){
for(int i=;i<=n;i++)
cur[i]=head[i];
Flow+=DFS(s,INF); }
//printf("!!%d\n",Flow);
return Flow;
}
}dinic;
int N,M,K,L,R,sum,kase;
int du[maxn];
int main(){
kase=;
while(scanf("%d%d%d",&N,&M,&K)!=EOF){
++kase;
memset(du,,sizeof(du));
scanf("%d%d",&L,&R);
dinic.init(N+M+);
for(int i=;i<=N;i++){
dinic.add_edge(,i,R-L);
du[i]+=L;du[]-=L;
}
sum=;
for(int i=;i<=M;i++){
dinic.add_edge(i+N,N+M+,R-L);
du[i+N]-=L;du[N+M+]+=L;
}
int a,b;
for(int i=;i<=K;i++){
scanf("%d%d",&a,&b);
dinic.add_edge(a,b+N,);
}
dinic.add_edge(N+M+,,INF);
int s=N+M+,t=N+M+;
for(int i=;i<=N+M+;i++){
if(du[i]>){
sum+=du[i];
dinic.add_edge(s,i,du[i]);
}
if(du[i]<){
dinic.add_edge(i,t,-du[i]);
}
}
int maxflow=dinic.Maxflow(s,t);
// printf("%d %d\n",maxflow,sum);
printf("Case %d: ",kase);
if(maxflow==sum){
printf("Yes\n");
}else{
printf("No\n");
}
}
return ;
}

【2018沈阳赛区网络预选赛J题】Fantastic Graph 【有上下界的网络流】的更多相关文章

  1. 【2018沈阳赛区网络预选赛J题】Ka Chang【分块+DFS序+线段树】

    题意 给出一个有根树(根是1),有n个结点.初始的时候每个结点的值都是0.下面有q个操作,操作有两种,操作1.将深度为L的点的值全部增加X.操作2.查询以x为根的子树的结点值得和. 其中N,Q< ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛 J树分块

    J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...

  3. ACM-ICPC 2018 焦作赛区网络预赛J题 Participate in E-sports

    Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...

  4. Fantastic Graph 2018 沈阳赛区网络预赛 F题

    题意: 二分图 有k条边,我们去选择其中的几条 每选中一条那么此条边的u 和 v的度数就+1,最后使得所有点的度数都在[l, r]这个区间内 , 这就相当于 边流入1,流出1,最后使流量平衡 解析: ...

  5. ACM-ICPC 2018 南京赛区网络预赛 J题Sum(线性筛素数)

    题目链接:https://nanti.jisuanke.com/t/30999 参考自博客:https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Na ...

  6. ACM-ICPC 2018 沈阳赛区网络预赛 I 题 Lattice's basics in digital electronics

    原题链接:https://nanti.jisuanke.com/t/31450 附上队友代码:(感谢队友带飞) #include <bits/stdc++.h> using namespa ...

  7. ACM-ICPC 2018 沈阳赛区网络预赛 K题

    题目链接: https://nanti.jisuanke.com/t/31452 AC代码(看到不好推的定理就先打表!!!!): #include<bits/stdc++.h> using ...

  8. Made In Heaven 2018 沈阳赛区网络预赛 D题

    求第k短路 模板题 套模板即可 #include <iostream> #include <cstring> #include <cstdio> #include ...

  9. ACM-ICPC 2018 沈阳赛区网络预赛 J. Ka Chang(树上分块+dfs序+线段树)

    题意 链接:https://nanti.jisuanke.com/t/A1998 给出一个有根树(根是1),有n个结点.初始的时候每个结点的值都是0.下面有q个操作,操作有两种,操作1.将深度为L(根 ...

随机推荐

  1. springboot中 简单的SpringMvc全局异常处理

    1.全局异常处理类:GlobalExceptionHandler.java package com.lf.exception; import java.util.HashMap; import jav ...

  2. JLink RTT Client代替printf(IAR测试OK)

    1.打开J-Link安装目录,确保SEGGER目录中有J-Link RTT Client,没有的话必须安装4.9以上版本: 2.打开SEGGER目录下软件SEGGER目录,硬件版本Hardware是8 ...

  3. js的delegate回调例子

    暂时没发现有具体的实际用处,先记录下 <!DOCTYPE html> <html> <head lang="en"> <meta char ...

  4. Java-Runoob-高级教程:Java 发送邮件

    ylbtech-Java-Runoob-高级教程:Java 发送邮件 1.返回顶部 1. Java 发送邮件 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 Java ...

  5. Hive语句执行优化-简化UDF执行过程

      Hive会将执行的SQL语句翻译成对应MapReduce任务,当SQL语句比较简单时,性能还是可能处于可接受的范围.但是如果涉及到非常复杂的业务逻辑,特别是通过程序的方式(一些模版语言生成)生成大 ...

  6. MySql命令集合

    1.mysql命令用户连接数据库 mysql命令格式: mysql -h主机地址 -u用户名 -p用户密码 (1) 连接到本机上的MYSQL 首先打开DOS窗口,然后进入目录mysql\bin,再键入 ...

  7. 【UVa】1601 The Morning after Halloween(双向bfs)

    题目 题目     分析 双向bfs,对着书打的,我还调了好久.     代码 #include<cstdio> #include<cstring> #include<c ...

  8. CDH5.10.0 离线安装(共3节点) 转

    1.安装方式 CDH的离线部署安装,即Parcel包(推荐) 2.角色规划 三个节点对应的角色: 3.基本环境配置(在每个节点上都要配置) (1)关闭防火墙 #/etc/init.d/iptables ...

  9. JS回调函数(深入篇)

    <有些错别字> 在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中 ...

  10. java中构造方法和方法super/this超类与子类中初始化顺序

    java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...