[codeforces 852 D] Exploration Plan 解题报告 (二分+最大匹配)
2024-08-27 15:55:02
题目链接:http://codeforces.com/problemset/problem/852/D
题目大意:
有V个点,N个队伍,E条边,经过每条边有个时间,告诉你初始N个队伍的位置,求至少有K个队伍在不同的点的最短时间
题解:
我们二分答案时间,显然具有单调性。先floyd预处理两点之间的最短路,二分答案后把每个人和他可以走到的点连起来,跑一次最大匹配。若最大匹配数大于等于k,说明当前答案小了,否则大了
(每个匹配相等于一个人和他最终去的位置)
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std; const int N=+;
const int inf=1e9+;
const int Inf=;
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=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
void floyd()
{
for (int k=;k<=v;k++)
for (int i=;i<=v;i++)
for (int j=;j<=v;j++) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
bool dfs(int x)
{
for (int i=;i<=v;i++)
{
if (vis[i]||!mp[x][i]) continue;
vis[i]=;
if (match[i]==-||dfs(match[i]))
{
match[i]=x;
return true;
}
}
return false;
}
int check(int l)
{
memset(match,-,sizeof(match));
for (int i=;i<=n;i++)
for (int j=;j<=v;j++)
mp[i][j]=(d[pos[i]][j]<=l);
int ans=;
for (int i=;i<=n;i++)
{
memset(vis,,sizeof(vis));
if (dfs(i)) ans++;
}
return ans;
}
int main()
{
v=read();e=read();n=read();k=read();
for (int i=;i<=v;i++)
for (int j=;j<=v;j++) if (i!=j) d[i][j]=inf;
for (int i=;i<=n;i++) pos[i]=read();
for (int i=,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=,r=Inf,ans=Inf;
while (l<r)
{
int mid=l+r>>;
if (check(mid)>=k) r=mid,ans=min(ans,r);
else l=mid+;
}
if (ans==Inf) puts("-1");
else printf("%d\n",ans);
return ;
}
最新文章
- iOS开发之Masonry框架源码深度解析
- Leetcode N-Queens
- Java数据结构之表的增删对比---ArrayList与LinkedList之一
- Linux下的删除命令
- dedecms代码研究七
- 获取url据对路径写法
- js设置输入框失去光标与光标选中时样式
- 通过一个简单的数据库操作类了解PHP链式操作的实现
- 也谈---基于 HTTP 长连接的“服务(转载)
- BZOJ 4260: Codechef REBXOR( trie )
- 使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包(转)
- python3 判断数据类型
- springboot No Identifier specified for entity的解决办法
- 移动端项目在ios上输入框聚焦难解决方案
- 《笨方法学Python》加分题6
- Java 浅拷贝,深拷贝
- 在Macos下完美解决Adobe Dreamweaver CC 2018 汉化及操作方法
- LeetCode 5. Longest Palindromic Substring &; 回文字符串
- 2017萌新的ACM之旅参考代码
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
热门文章
- 在C#中运行PowerShell
- C# MVC登录判断状态
- Controller总结
- Codeforces Round #284 (Div. 2) A
- 杭电 4508 湫湫系列故事——减肥记I【完全背包】
- Vue学习之路第五篇:v-bind
- [中文] 以太坊(Ethereum )白皮书
- 2、使用Python3爬取美女图片-网站中的妹子自拍一栏
- 2019-03-18 用Task Schedule定时调用Python脚本
- 使用剩余参数代替 arguments (prefer-rest-params)