博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hiho# 1394最小路径覆盖 网络流拆点
阅读量:4538 次
发布时间:2019-06-08

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

思路:

  观察到路径上除了终点起点以外的每个点出度和入度都为1,和网络流的拆点很像,所以就把每个点都拆成两个点,若存在一条路径$(u,v)$,则建一条$(u,v+n,1)$的边,然后求出最大流后,每个起点的入度都是0,所以$ans=n-maxflow$。

  注意由于是拆点,所以各种数组都要开两倍空间。

#include
#define clr(a,b) memset(a,b,sizeof(a))using namespace std;typedef long long ll;const ll INFLL = 0x3f3f3f3f3f3f3f3f;const int INF = 0x3f3f3f3f;const int maxn = 510;struct Edge { int to, flow, nxt; Edge(){} Edge(int to, int nxt, int flow):to(to),nxt(nxt), flow(flow){}}edge[maxn * maxn * 2];int head[maxn*2], dep[maxn*2];int S, T;int N, n, m, tot;void init(int n){ N=n; for (int i = 0; i <= N; ++i) head[i] = -1; tot = 0;}void addv(int u, int v, int w, int rw = 0){ edge[tot] = Edge(v, head[u], w); head[u] = tot++; edge[tot] = Edge(u, head[v], rw); head[v] = tot++;}bool BFS(){ for (int i = 0; i <= N; ++i) dep[i] = -1; queue
q; q.push(S); dep[S] = 1; while (!q.empty()) { int u = q.front(); q.pop(); for (int i = head[u]; ~i; i = edge[i].nxt) { if (edge[i].flow && dep[edge[i].to] == -1) { dep[edge[i].to] = dep[u] + 1; q.push(edge[i].to); } } } return dep[T] < 0 ? 0 : 1;}int DFS(int u, int f){ if (u == T || f == 0) return f; int w, used = 0; for (int i = head[u]; ~i; i = edge[i].nxt) { if (edge[i].flow && dep[edge[i].to] == dep[u] + 1) { w = DFS(edge[i].to, min(f - used, edge[i].flow)); edge[i].flow -= w; edge[i ^ 1].flow += w; used += w; if (used == f) return f; } } if (!used) dep[u] = -1; return used;}int Dicnic(){ int ans = 0; while (BFS()) { ans += DFS(S, INF); } return ans;}int main(){ cin>>n>>m; T=2*n+1; init(T); S=0; while(m--){ int u,v; scanf("%d%d",&u,&v); addv(u,v+n,1); } for(int i=1;i<=n;i++){ addv(S,i,1); addv(i+n,T,1); } int ans=n-Dicnic(); printf("%d\n",ans);}

 

转载于:https://www.cnblogs.com/mountaink/p/10670781.html

你可能感兴趣的文章
有关HTTP的粗读
查看>>
连接mysql数据库,创建用户模型
查看>>
Uncaught TypeError: (intermediate value)(...) is not a function
查看>>
NOIP模拟:能源(二分答案)
查看>>
模拟I2C协议学习点滴之原理框架
查看>>
数组中重复的数字
查看>>
scipy插值interpolation
查看>>
C# BackgroundWorker
查看>>
移动对meta的定义
查看>>
(转载)char与byte的区别
查看>>
《零基础学习Python》01
查看>>
UESTC 1634 记得小苹初见,两重心字罗衣
查看>>
[mooc]open course on github
查看>>
hdu3714 三分找最值
查看>>
JSON-RPC(jsonrpc4j)使用demo
查看>>
Deploy Sharepoint Designer 2010 Workflow as WSP
查看>>
启动页面
查看>>
innodb_flush_log_at_trx_commit与sync_binlog理解
查看>>
Python脚本重定向其输出时的编码问题
查看>>
二叉搜索树
查看>>