博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[codeforces 852 D] Exploration Plan 解题报告 (二分+最大匹配)
阅读量:5088 次
发布时间:2019-06-13

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

题目链接:

题目大意:

有V个点,N个队伍,E条边,经过每条边有个时间,告诉你初始N个队伍的位置,求至少有K个队伍在不同的点的最短时间

题解:

我们二分答案时间,显然具有单调性。先floyd预处理两点之间的最短路,二分答案后把每个人和他可以走到的点连起来,跑一次最大匹配。若最大匹配数大于等于k,说明当前答案小了,否则大了

(每个匹配相等于一个人和他最终去的位置)

#include
#include
#include
#include
using namespace std;const int N=600+15;const int inf=1e9+7;const int Inf=1731311;int v,e,n,k;int pos[N],d[N][N],mp[N][N],match[N],vis[N];inline int read(){ char ch=getchar(); int s=0,f=1; while (ch<'0'||ch>'9') {
if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9') {s=(s<<3)+(s<<1)+ch-'0';ch=getchar();} return s*f;}void floyd(){ for (int k=1;k<=v;k++) for (int i=1;i<=v;i++) for (int j=1;j<=v;j++) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);}bool dfs(int x){ for (int i=1;i<=v;i++) { if (vis[i]||!mp[x][i]) continue; vis[i]=1; if (match[i]==-1||dfs(match[i])) { match[i]=x; return true; } } return false;}int check(int l){ memset(match,-1,sizeof(match)); for (int i=1;i<=n;i++) for (int j=1;j<=v;j++) mp[i][j]=(d[pos[i]][j]<=l); int ans=0; for (int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if (dfs(i)) ans++; } return ans; }int main(){ v=read();e=read();n=read();k=read(); for (int i=1;i<=v;i++) for (int j=1;j<=v;j++) if (i!=j) d[i][j]=inf; for (int i=1;i<=n;i++) pos[i]=read(); for (int i=1,u,v,w;i<=e;i++) { u=read();v=read();w=read(); d[u][v]=d[v][u]=min(d[u][v],w); } floyd(); int l=0,r=Inf,ans=Inf; while (l
>1; if (check(mid)>=k) r=mid,ans=min(ans,r); else l=mid+1; } if (ans==Inf) puts("-1"); else printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/xxzh/p/9762720.html

你可能感兴趣的文章
ROS学习笔记十:URDF详解
查看>>
软件测试计划
查看>>
IOS Audio开发集合
查看>>
mysql并发控制之快照读和当前读
查看>>
DirectX11 With Windows SDK--27 计算着色器:双调排序
查看>>
POJ1456 Supermarket
查看>>
Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
查看>>
jQuery $.each的使用方法
查看>>
leetcode 198-234 easy
查看>>
Matlab中给figure添加图例(legend),标题(title)和颜色(color)...
查看>>
window.location详解
查看>>
UVALive-3989 Ladies' Choice (稳定婚姻问题)
查看>>
CC2430基础——串口代码分析
查看>>
WIN7 不用格式化磁盘怎么把FAT32系统改成NTFS系统
查看>>
macOS seria 10.12升级到macOS Mojave的报错:xcrun: error: invalid active developer path, missing xcrun...
查看>>
在Eclipse中导入dtd和xsd文件,使XML自动提示(转)
查看>>
【网络流24题】魔术球问题 二分答案+最小路径覆盖
查看>>
P2216 理想的正方形
查看>>
Java中的值传递与引用传递
查看>>
安装scrapy
查看>>