POJ_1125_(dijkstra)
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 35553 | Accepted: 19733 |
Description
Unfortunately for you, stockbrokers only trust information coming from their "Trusted sources" This means you have to take into account the structure of their contacts when starting a rumour. It takes a certain amount of time for a specific stockbroker to pass the rumour on to each of his colleagues. Your task will be to write a program that tells you which stockbroker to choose as your starting point for the rumour, as well as the time it will take for the rumour to spread throughout the stockbroker community. This duration is measured as the time needed for the last person to receive the information.
Input
Each person is numbered 1 through to the number of stockbrokers. The time taken to pass the message on will be between 1 and 10 minutes (inclusive), and the number of contacts will range between 0 and one less than the number of stockbrokers. The number of stockbrokers will range from 1 to 100. The input is terminated by a set of stockbrokers containing 0 (zero) people.
Output
It is possible that your program will receive a network of connections that excludes some persons, i.e. some people may be unreachable. If your program detects such a broken network, simply output the message "disjoint". Note that the time taken to pass the message from person A to person B is not necessarily the same as the time taken to pass it from B to A, if such transmission is possible at all.
Sample Input
3
2 2 4 3 5
2 1 2 3 6
2 1 2 2 2
5
3 4 4 2 8 5 3
1 5 8
4 1 6 4 10 2 7 5 2
0
2 2 5 1 5
0
Sample Output
3 2
3 10
题是真的难读。。。 题意:每个人有若干个朋友,将一条消息传给自己的朋友需要花费一定的时间,问选择哪一个人作为源点所有人得到消息的时间最短。
根据样例理解,一个人是可以同时发给所有朋友。 思路:根据题意自然想到了最短路,对每个人求一遍,每求一个人找最大的dist,不连通则res=INF。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 105
#define INF 999999999 int n; struct Eage
{
int v,val,next;
} eage[N*N]; int head[N],cnte; void addEage(int a,int b,int t)
{
eage[cnte].v=b;
eage[cnte].val=t;
eage[cnte].next=head[a];
head[a]=cnte++;
} int dist[N];
bool vis[N];
void dijkstra(int ver)
{
for(int i=; i<=n; i++)
{
dist[i]=INF;
vis[i]=;
}
for(int i=head[ver]; i!=; i=eage[i].next)
{
int v=eage[i].v;
int val=eage[i].val;
dist[v]=val;
}
dist[ver]=;
vis[ver]=;
for(int i=; i<n; i++)
{
int mindist=INF,u=ver;
for(int j=; j<=n; j++)
if(dist[j]<mindist&&vis[j]==)
{
mindist=dist[j];
u=j;
}
vis[u]=;
for(int j=head[u];j!=;j=eage[j].next)
{
int v=eage[j].v;
int val=eage[j].val;
if(dist[v]>dist[u]+val)
dist[v]=dist[u]+val;
}
}
} int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
cnte=;
for(int i=; i<=n; i++)
{
head[i]=;
int m;
scanf("%d",&m);
for(int j=; j<m; j++)
{
int ver,tim;
scanf("%d%d",&ver,&tim);
addEage(i,ver,tim);
}
}
int resver=INF,res=INF;
for(int i=; i<=n; i++)
{
dijkstra(i);
int val=;
for(int j=;j<=n;j++)
if(dist[j]>val)
val=dist[j];
if(val<res)
{
resver=i;
res=val;
}
}
if(res==INF)
printf("disjoint\n");
else
printf("%d %d\n",resver,res);
}
return ;
}
POJ_1125_(dijkstra)的更多相关文章
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- 最短路径算法-Dijkstra
Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...
- [板子]最小费用最大流(Dijkstra增广)
最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...
- POJ 2253 Frogger(Dijkstra)
传送门 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39453 Accepted: 12691 Des ...
- POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)
传送门 Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 46727 Acce ...
- Dijkstra 算法
all the nodes should be carectorized into three groups: (visited, front, unknown) we should pay spec ...
- 51nod 1459 迷宫游戏 (最短路径—Dijkstra算法)
题目链接 中文题,迪杰斯特拉最短路径算法模板题. #include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f ],v ...
- 51nod1459(带权值的dijkstra)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...
- 求两点之间最短路径-Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.D ...
随机推荐
- bzoj1486【HNOI2009】最小圈
1486: [HNOI2009]最小圈 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1778 Solved: 827 [Submit][Statu ...
- vmware中鼠标在部分区域不能使用
https://blog.csdn.net/dreamengsoul/article/details/80439278 方法1:重装VMware tools; 方法2:使用增强型键盘鼠标: 方法3:检 ...
- android编程取消标题栏方法(appcompat_v7、Theme.NoTitleBar)
方式一:编码方式 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance ...
- KMP算法在字符串中的应用
KMP算法是处理字符串匹配的一种高效算法 它首先用O(m)的时间对模板进行预处理,然后用O(n)的时间完成匹配.从渐进的意义上说,这样时间复杂度已经是最好的了,需要O(m+n)时间.对KMP的学习可以 ...
- 【转】Echarts的使用以及动态加载数据
一.Echarts的介绍 ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新 ...
- 切换或者用户登录时 出现 显示 -bash-4.2$ 问题 的解决
集群的普通用户在登录用户或者切换用户时,出现 -bash-4.2$ 的状态: [goldwind@TR-OS-DB 9.4]#su postgres bash-4.2$ 原因:在linux下通过use ...
- sql server 查看版本
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'),SERVERPROPERTY ('edition') ...
- 使用redis构建分布式锁
Redis使用WATCH命令来代替对数据进行加锁,因为WATCH只会在数据被其他客户端抢先修改了的情况下通知执行了这个命令的客户端,但是不会阻止其他客户端对数据进行修改,所以这个命令被称为乐观锁. 但 ...
- javascript---DOM大编程
编程练习 制作一个表格,显示班级的学生信息. 要求: 1. 鼠标移到不同行上时背景色改为色值为 #f2f2f2,移开鼠标时则恢复为原背景色 #fff 2. 点击添加按钮,能动态在最后添加一行 3. 点 ...
- 在Linux下使用linuxdeployqt发布Qt程序
一.简介 linuxdeployqt 是Linux下的qt打包工具,可以将应用程序使用的资源(如库,图形和插件)复制到二进制运行文件所在的文件夹中. 二.安装linuxdeployqt 去github ...