战争时期,前线有 n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。

信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。

指挥部设在第一个哨所。当指挥部下达一个命令后,指挥部就派出若干个信使向与指挥部相连的哨所送信。

当一个哨所接到信后,这个哨所内的信使们也以同样的方式向其他哨所送信。

信在一个哨所内停留的时间可以忽略不计

直至所有n个哨所全部接到命令后,送信才算成功。

因为准备充足,每个哨所内都安排了足够的信使(如果一个哨所与其他k个哨所有通信联系的话,这个哨所内至少会配备 kk个信使)。

现在总指挥请你编一个程序,计算出完成整个送信过程最短需要多少时间。

#include<bits/stdc++.h>
#define N 1000000
using namespace std;
priority_queue<pair<int ,int >,vector<pair<int ,int > >,greater<pair<int ,int > > > dl;
int head[N],to[N],vis[N],net[N];
int d[N],f[N];
int cut,n,m,ans;
void add(int from, int t,int v){net[++cut]=head[from],to[cut]=t,vis[cut]=v,head[from]=cut;};
void dijkstra(int x)
{
dl.push(make_pair(0,x));
d[x]=0;
while(dl.size())
{
x=dl.top().second;dl.pop();
if(f[x]==1)continue;f[x]=1;
for(int i=head[x];i;i=net[i])
{
int y=to[i];
if(d[x]+vis[i]<d[y])
{
d[y]=d[x]+vis[i];
dl.push(make_pair(d[y],y));
}
}
}
}
int main()
{
cin>>m>>n;
memset(d,0x3f3f3f3f,sizeof d);
for(int i=1;i<=n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
dijkstra(1);
for(int i=1;i<=m;i++){ans=max(ans,d[i]);}
if(ans==0x3f3f3f3f)ans=-1;
cout<<ans;
return 0;
}

最新文章

  1. kettle系列-5.kettle实现二进制文件迁移
  2. 【博客美化】05.添加GitHub链接
  3. 深入理解Nginx之调试优化技巧
  4. subprocess模块在Windows下调用失败问题
  5. Net分布式系统之二:CentOS系统搭建Nginx负载均衡(下)
  6. 关闭微软对win10的推送
  7. android 相对布局
  8. SQL Server 2008 清空删除日志文件
  9. ylbtech-数据库设计与优化-对作为复选框/单选列表的集合表的设计
  10. PureLayout(轻量级自动布局)
  11. Robot Framework与Web界面自动化测试学习笔记:简单例子
  12. TDD
  13. (简单) FZU 2150 Fire Game ,Floyd。
  14. NoSQL注入的分析和缓解
  15. Java不走弯路教程(3.用户验证与文件内容查询)
  16. 支持JSP和Servlet的Web服务器
  17. POJ 3090 Visible Lattice Points 【欧拉函数】
  18. vue 之组件递归;
  19. excel2010的使用笔记
  20. Task.WaitAll代替WaitHandle.WaitAll

热门文章

  1. 《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序
  2. 关于jmeter线程组和循环次数的设置
  3. WPS2019党政机关单位版(无广告困扰)
  4. 11.3 free:查看系统内存信息
  5. Nextcloud 使用教程
  6. Rabbitmqpool
  7. 使用现代C++如何避免bugs(下)
  8. CVPR2020:点云弱监督三维语义分割的多路径区域挖掘
  9. Git_远程仓库fork操作
  10. yum install php-bcmath-5.4.16-42.el7.x86_64.rpm安装报错