模板。

  1 #include<iostream>
  2 #include<cstring>
  3 #include<cstdio>
  4 //#include<time.h>
  5 //#include<complex>
  6 //#include<set>
  7 //#include<queue>
  8 #include<algorithm>
  9 #include<stdlib.h>
 10 using namespace std;
 11
 12 #define LL long long
 13 int qread()
 14 {
 15     char c; int s=0,f=1; while ((c=getchar())<'0' || c>'9') (c=='-') && (f=-1);
 16     do s=s*10+c-'0'; while ((c=getchar())>='0' && c<='9'); return s*f;
 17 }
 18
 19 //Pay attention to '-' , LL and double of qread!!!!
 20
 21 int n,m;
 22 #define maxn 511
 23 #define maxm 15011
 24 struct Edge{int to,next,flow,cap;};
 25 struct Network
 26 {
 27     Edge edge[maxm]; int first[maxn],le,n;
 28     void clear(int N) {le=2; memset(first,0,sizeof(first)); n=N;}
 29     void in(int x,int y,int cap) {Edge &e=edge[le]; e.to=y; e.cap=cap; e.flow=0; e.next=first[x]; first[x]=le++;}
 30     void insert(int x,int y,int cap) {in(x,y,cap); in(y,x,0);}
 31     int dis[maxn]; int que[maxn],cur[maxn],head,tail,s,t;
 32     bool bfs()
 33     {
 34         memset(dis,0,sizeof(dis)); dis[s]=1;
 35         head=tail=0; que[tail++]=s;
 36         while (head!=tail)
 37         {
 38             int x=que[head++];
 39             for (int i=first[x];i;i=edge[i].next)
 40             {
 41                 Edge &e=edge[i];
 42                 if (!dis[e.to] && e.cap>e.flow)
 43                 {
 44                     dis[e.to]=dis[x]+1;
 45                     que[tail++]=e.to;
 46                 }
 47             }
 48         }
 49         return dis[t];
 50     }
 51     int dfs(int x,int a)
 52     {
 53         if (x==t || !a) return a;
 54         int flow=0,f;
 55         for (int &i=cur[x];i;i=edge[i].next)
 56         {
 57             Edge &e=edge[i];
 58             if (dis[e.to]==dis[x]+1 && (f=dfs(e.to,min(e.cap-e.flow,a)))>0)
 59             {
 60                 flow+=f; e.flow+=f;
 61                 edge[i^1].flow-=f; a-=f;
 62                 if (!a) break;
 63             }
 64         }
 65         return flow;
 66     }
 67     int Dinic(int S,int T)
 68     {
 69         s=S; t=T;
 70         int ans=0;
 71         while (bfs())
 72         {
 73             for (int i=1;i<=n;i++) cur[i]=first[i];
 74             ans+=dfs(s,0x3f3f3f3f);
 75         }
 76         return ans;
 77     }
 78 }g;
 79
 80 bool vis[maxn];
 81 int main()
 82 {
 83     n=qread(); m=qread();
 84     int s=2*n+1,t=s+1; g.clear(t);
 85     for (int i=1,x,y;i<=m;i++)
 86     {
 87         x=qread(); y=qread();
 88         g.insert(x,y+n,1);
 89     }
 90     for (int i=1;i<=n;i++) g.insert(s,i,1),g.insert(i+n,t,1);
 91     int ans=n-g.Dinic(s,t);
 92     for (int i=1;i<=n;i++) if (!vis[i])
 93     {
 94         printf("%d",i);
 95         bool flag=1; int x=i;
 96         while (flag)
 97         {
 98             vis[x]=1;
 99             flag=0;
100             for (int j=g.first[x];j;j=g.edge[j].next)
101             {
102                 Edge &e=g.edge[j]; if (e.to==s) continue;
103                 if (e.cap==e.flow) {flag=1; printf(" %d",x=e.to-n); break;}
104             }
105         }
106         puts("");
107     }
108     printf("%d\n",ans);
109     return 0;
110 }

View Code

转载于:https://www.cnblogs.com/Blue233333/p/8945283.html

LOJ#6002. 「网络流 24 题」最小路径覆盖相关推荐

  1. LibreOJ #6002. 「网络流 24 题」最小路径覆盖

    内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:Special Judge 上传者: 匿名 网络流 最大流 屠龙宝刀点击就送 #include <cs ...

  2. 流网络的最小割问题c语言,「网络流24题」最小路径覆盖问题

    Description 问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任 ...

  3. loj #6226. 「网络流 24 题」骑士共存问题

    #6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些 ...

  4. loj #6004. 「网络流 24 题」圆桌聚餐(最大流)

    #6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...

  5. 【网络流24题】最小路径覆盖问题

    [题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...

  6. 【刷题】LOJ 6011 「网络流 24 题」运输问题

    题目描述 W 公司有 \(m\) 个仓库和 \(n\) 个零售商店.第 \(i\) 个仓库有 \(a_i\) 个单位的货物:第 \(j\) 个零售商店需要 \(b_j\) 个单位的货物.货物供需平衡, ...

  7. 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集

    题目描述 给定实直线 \(L\) 上 \(n\) 个开区间组成的集合 \(I\) ,和一个正整数 \(k\) ,试设计一个算法,从开区间集合 \(I\) 中选取出开区间集合 \(S \subseteq ...

  8. 【刷题】LOJ 6005 「网络流 24 题」最长递增子序列

    题目描述 给定正整数序列 \(x_1 \sim x_n\) ,以下递增子序列均为非严格递增. 计算其最长递增子序列的长度 \(s\) . 计算从给定的序列中最多可取出多少个长度为 \(s\) 的递增子 ...

  9. LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

    #6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

最新文章

  1. 为了自动驾驶,谷歌用NeRF在虚拟世界中重建了旧金山市
  2. Maven -- 使用Myeclipse创建Maven项目
  3. 轻量级HTTP服务器Nginx(配置与调试Nginx)(转)
  4. 浅析影响网站建设的因素有哪些?
  5. android InputStream中read()与read(byte[] b)
  6. 前端学习(3132):react-hello-react之react中事件处理
  7. mongodb 统计内嵌文档中某一属性的方法
  8. 最好用的mysql密码忘记的解决方法
  9. java中KMP模式,Java数据结构-串及其应用-KMP模式匹配算法
  10. nginx——ngx_http_gzip_module
  11. JAVA版村庄哨塔种子_我的世界:TOP18种子,刷怪笼、哨塔和村庄挤在一起,还不来试试?...
  12. 维修技术论坛专用工具包 v5.0
  13. 中国互联网的5大生死逻辑
  14. 行业领军的高压线性恒流驱动IC,真正长寿的半导体线性IC
  15. 电脑上计算机软件一直自动弹出,拨号连接自动弹出,详细教您如何解决电脑总是自动弹出...
  16. 日期格式 Wed Oct 16 00:00:00 CEST 2020 转换
  17. 在Letax中使用enumerate编辑 Step1 , Step2, ..... ,并设置缩进
  18. Python爬虫-QQ音乐下载(详解)
  19. Excel表格中实现IP地址排序
  20. 京东面试官:从求职者到面试官的心路历程

热门文章

  1. 基于Colab Pro Google Drive的Kaggle实战
  2. Centos中查找文件、目录、内容
  3. 【题解】洛谷P4145 花神游历各国(线段树)
  4. vue 公用组件开发 确认框confirm
  5. 各种排序笔记---基于非比较排序部分
  6. jquery特效(6)—判断复选框是否选中进行答题提示
  7. WebApi权限验证流程的设计和实现
  8. Shallow Copy Deep Copy in Python list
  9. 安卓注册手机短信验证码验证的案例-02
  10. rocketmq 初探(五)