博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2594 Treasure Exploration(Floyd+最小路径覆盖)
阅读量:4959 次
发布时间:2019-06-12

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

题意:求有向图的最小路径覆盖,但是点可以被多条路径重复走过!

求最小路径覆盖的问题:HDU1151, 链接: http://acm.hdu.edu.cn/showproblem.php?pid=1151

分析:点能被重复覆盖是和单纯地求最小路径覆盖的区别,这样的话在一个弱连通子图中,可能出现中间结点已经被走过,但是之后的点没被覆盖的情况,这时匹配的结果就会比原来大。

那么可以通过求出图的传递闭包来加边,将原来没有直接边的点建立关系,这样就能得到正确结果。

#include
#include
#include
#include
#include
#define Lson rt<<1,l,m#define Rson rt<<1|1,m+1,rusing namespace std;typedef long long LL;const int maxn = 1e3+5,maxm = 2e5+5;int N;struct Edge{ int to,next;}edges[maxm];int head[maxn],tot;int linker[maxn];bool used[maxn];void init(){ tot=0; memset(head,-1,sizeof(head));}void AddEdge(int u,int v){ edges[tot].to = v; edges[tot].next = head[u]; head[u] = tot++;}bool dfs(int u){ int v,st,ed; for(int i=head[u];~i;i = edges[i].next){ v = edges[i].to; if(!used[v]){ used[v]=true; if(linker[v]==-1||dfs(linker[v])){ linker[v]=u; return true; } } } return false;}int hungary(){ int res=0; memset(linker,-1,sizeof(linker)); for(int u=1;u<=N;u++){ memset(used,0,sizeof(used)); if(dfs(u)) res++; } return res; }void Floyd(){ for(int u=1;u<=N;++u){ for(int i = head[u];~i;i =edges[i].next){ int v=edges[i].to; for(int j=head[v];~j;j=edges[j].next){ AddEdge(u,edges[j].to); } } }}void debug(){ }int main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int T,M,u,v,tmp,k; while(scanf("%d%d",&N,&M)==2){ if(!N) break; init(); for(int i=1;i<=M;++i){ scanf("%d%d",&u,&v); AddEdge(u,v); } Floyd(); printf("%d\n",N-hungary()); } return 0;}

 

转载于:https://www.cnblogs.com/xiuwenli/p/9373840.html

你可能感兴趣的文章
集成百度推送
查看>>
在项目中加入其他样式
查看>>
在使用Kettle的集群排序中 Carte的设定——(基于Windows)
查看>>
【原】iOS中KVC和KVO的区别
查看>>
OMAPL138学习----DSPLINK DEMO解析之SCALE
查看>>
IoC的基本概念
查看>>
restframework CBV试图的4种方式
查看>>
大图居中,以1920px为例
查看>>
Python3 图片转字符画
查看>>
[C陷阱和缺陷] 第7章 可移植性缺陷
查看>>
人需要治愈
查看>>
linux中configure文件默认执行结果所在位置
查看>>
jmeter 断言
查看>>
Windows向Linux上传文件夹
查看>>
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>