题目链接: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 ;
}

最新文章

  1. iOS开发之Masonry框架源码深度解析
  2. Leetcode N-Queens
  3. Java数据结构之表的增删对比---ArrayList与LinkedList之一
  4. Linux下的删除命令
  5. dedecms代码研究七
  6. 获取url据对路径写法
  7. js设置输入框失去光标与光标选中时样式
  8. 通过一个简单的数据库操作类了解PHP链式操作的实现
  9. 也谈---基于 HTTP 长连接的“服务(转载)
  10. BZOJ 4260: Codechef REBXOR( trie )
  11. 使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包(转)
  12. python3 判断数据类型
  13. springboot No Identifier specified for entity的解决办法
  14. 移动端项目在ios上输入框聚焦难解决方案
  15. 《笨方法学Python》加分题6
  16. Java 浅拷贝,深拷贝
  17. 在Macos下完美解决Adobe Dreamweaver CC 2018 汉化及操作方法
  18. LeetCode 5. Longest Palindromic Substring &amp; 回文字符串
  19. 2017萌新的ACM之旅参考代码
  20. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

热门文章

  1. 在C#中运行PowerShell
  2. C# MVC登录判断状态
  3. Controller总结
  4. Codeforces Round #284 (Div. 2) A
  5. 杭电 4508 湫湫系列故事——减肥记I【完全背包】
  6. Vue学习之路第五篇:v-bind
  7. [中文] 以太坊(Ethereum )白皮书
  8. 2、使用Python3爬取美女图片-网站中的妹子自拍一栏
  9. 2019-03-18 用Task Schedule定时调用Python脚本
  10. 使用剩余参数代替 arguments (prefer-rest-params)