喵哈哈村的魔法考试 Round #19 (Div.2) C

描述

喵哈哈村有一个魔法源泉,里面有无穷无尽的力量。

但是前提是你能答出这样一个问题:

小T打算在城市C开设一家外送快餐店。送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方。

快餐店的顾客分布在城市C的N个建筑中,这N个建筑通过恰好N-1条双向道路连接起来,不存在任何两条道路连接了相同的两个建筑。任意两个建筑之间至少存在一条由双向道路连接而成的路径。小T的快餐店可以开设在任一建筑中,也可以开设在任意一条道路的某个位置上(该位置与道路两端的建筑的距离不一定是整数)。

现给定城市C的地图(道路分布及其长度),请找出最佳的快餐店选址,输出其与最远的顾客之间的距离。

输入

第一行包含一个整数N,表示城市C中的建筑和道路数目
接下来N-1行,每行3个整数,Ai,Bi,Li(1≤i≤N;Li>0),表示一条道路连接了建筑Ai与Bi,其长度为Li

满足:,n<=200000,Li<=10000

输出

一个实数,四舍五入保留恰好一位小数,表示最佳快餐店选址距离最远用户的距离

样例输入1

?4 

1 2 1

1 3 2

2 4 1

样例输出1

2.0

题目链接:

http://qscoj.cn/problem/129/

题意:

思路:

答案就是树的直径/2

随便拿一个点进行spfa,然后找到离这个点最远的点,又进行一次spfa,然后这个点所得到的最远点,那么这个距离,就是树的直径

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 #define MS(a) memset(a,0,sizeof(a))
 5 #define MP make_pair
 6 #define PB push_back
 7 const int INF = 0x3f3f3f3f;
 8 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
 9 inline ll read(){
10     ll x=0,f=1;char ch=getchar();
11     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
12     while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
13     return x*f;
14 }
15 //////////////////////////////////////////////////////////////////////////
16 const int maxn = 2e5+10;
17
18 struct edge{
19     int v,w;
20 };
21
22 vector<edge> g[maxn];
23 void add_edge(int u,int v,int w){
24     g[u].push_back((edge){v,w});
25     g[v].push_back((edge){u,w});
26 }
27
28 int inq[maxn],d[maxn];
29
30 int main(){
31     int n = read();
32     for(int i=0; i<n-1; i++){
33         int u,v,w;
34         cin >> u >> v >> w;
35         add_edge(u,v,w);
36     }
37
38     for(int i=0; i<=n; i++)
39         inq[i]=0,d[i]=INF;
40
41     queue<int> q;
42     q.push(1);
43     d[1] = 0; inq[1] = 1;
44
45     while(!q.empty()){
46         int now = q.front(); q.pop();
47         for(int i=0; i<(int)g[now].size(); i++){
48             edge e = g[now][i];
49             if(d[e.v] > d[now]+e.w){
50                 d[e.v] = d[now]+e.w;
51                 if(inq[e.v]) continue;
52                 inq[e.v] = 1;
53                 q.push(e.v);
54             }
55         }
56     }
57
58     int ans = 0, ans1;
59     for(int i=1; i<=n; i++){
60         if(d[i]!=INF && d[i]>ans){
61             ans = d[i];
62             ans1 = i;
63         }
64     }
65
66     for(int i=0; i<=n; i++)
67         inq[i]=0,d[i]=INF;
68
69     q.push(ans1);
70     d[ans1] = 0; inq[ans1] = 1;
71
72     while(!q.empty()){
73         int now = q.front(); q.pop();
74         for(int i=0; i<(int)g[now].size(); i++){
75             edge e = g[now][i];
76             if(d[e.v] > d[now]+e.w){
77                 d[e.v] = d[now]+e.w;
78                 if(inq[e.v]) continue;
79                 inq[e.v] = 1;
80                 q.push(e.v);
81             }
82         }
83     }
84
85     ans = 0;
86     for(int i=1; i<=n; i++){
87         if(d[i]!=INF && d[i]>ans){
88             ans = d[i];
89         }
90     }
91
92     printf("%.1f\n",(double)ans*1.0/2);
93 }
时间: 2024-10-02 02:59:24

喵哈哈村的魔法考试 Round #19 (Div.2) C的相关文章

2017-5-16-Train:喵哈哈村的魔法考试 Round #19 (Div.2)

A.喵哈哈村的魔力源泉(水题) 描述 喵哈哈村有一个魔法源泉,里面有无穷无尽的力量. 但是前提是你能答出这样一个问题: 给你a,b,p,让你输出a*b%p的值. 输入 本题包含若干组测试数据.第一行三个整数a,b,p.满足:0<=a,b,p<=1e9 输出 输出答案 样例输入1 1 2 5 2 3 5 样例输出1 2 1 Solve: 水题 Code: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4

喵哈哈村的魔法考试 Round #19 (Div.2) B

题目链接: http://qscoj.cn/problem/128/ 题意: 给你a,b,p,让你输出a*b%p的值.0<=a,b,p<=1e18 思路: 两个long long 相乘然后mod p,相乘以后可能会溢出,古有快速幂,现有快速乘法. 代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define MS(a) memset(a,0,sizeof(a)) 5 #

2017-5-20-Train: 喵哈哈村的魔法考试 Round #17 (Div.2)

A.喵哈哈村的秘境探险(数学) 描述 喵哈哈村的一堆人在前往北京的路上,发现了一个洞穴.由于好奇心大作,于是准备前往洞穴进行探险. 但是有一些人并不愿意前往洞穴,于是他们决定玩以下游戏,来看是否能够去秘境探险: 这儿有n个数,如果所有数的乘积是k的倍数,那么就去探险,否则就不去. 现在问你是否会去. 输入 本题包含若干组测试数据.第一行两个整数n,k,表示数的个数,和k.第二行n个整数,a[i].满足1<=n<=1000,1<=k,a[i]<=1e6 输出 如果要去的话,输出Yes

喵哈哈村的魔法考试 Round #7 (Div.2) B

  B 喵哈哈村的麦克雷  喵哈哈村的麦克雷 发布时间: 2017年3月13日 11:51   最后更新: 2017年3月14日 18:16   时间限制: 1000ms   内存限制: 128M 描述 为了拯救喵哈哈村,这个世界必须要存在英雄. 一名叫做麦克雷的英雄站了出来!他现在面临一个难题: 给定一个N x M的01矩阵,其中1表示陆地,0表示水域.对于每一个位置,求出它距离最近的水域的距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. 输入 本题包含若干组测试数据:第一行包含两

喵哈哈村的魔法考试 Round #3 (Div.2) ABCDE

官方题解:http://www.cnblogs.com/qscqesze/p/6480284.html 哗啦啦村的刁难(1) 描述 哗啦啦村作为喵哈哈村的对头,于是他们准备给喵哈哈村一个好看. 哗啦啦村的头号长老--鱼先生,就提出了以下问题: 给你三个木棍,问你这三个木棍,是否能够组成一个非退化的三角形! 输入 第一行一个整数T,表示测试组数的个数.接下来T行,每行三个整数,a,b,c.表示哗啦啦村提供的三根木棍. 满足1<=T<=1001<=a,b,c<=5000 输出 如果可以

2017-5-17-Train:喵哈哈村的魔法考试 Round #18 (Div.2)

A.喵哈哈村的古怪石碑(签到题) 描述 喵哈哈村有个奇怪的石碑,上面浮现出了一个奇怪的问题: 有一数列{an},给出其前三项a1,a2,a3,以及要求的项的编号n,并且数列{an}只可能是等差数列或者是首项为1的等比数列,要求A输出第n项模100007后的值. 输入 一行,四个整数,a1,a2,a3,n.满足:0< |a1|,|a2|,|a3|≤10^5,0<n<10^3.本题包含若干组测试数据. 输出 一行,一个数,即an模100007的值.(负数取模答案为负) 样例输入1 1 2 3

喵哈哈村的魔法考试 Round #10 (Div.2) A

喵哈哈村与哗啦啦村的大战(一) 发布时间: 2017年3月27日 09:13   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村因为和哗啦啦村争夺稀有的水晶资源,展开了激烈的战斗! 喵哈哈村里面有n个战士,这些战士每个人一开始拥有a[i]的战斗力,现在每个战士可以被艾尔之光强化三次,每次强化有p的概率增加一点战斗力,反之会有(1-p)的概率降低一点战斗力,当然战斗力不可能降为负数. 现在问题来了,对于喵哈哈村的n个战士,他们强化三次之后,战斗力最高可以到达多少呢?最少可以到达

喵哈哈村的魔法考试 Round #14 (Div.2)

喵哈哈村的四月半活动(一)(水题) 描述 今天是四月十五日,是喵哈哈村一年一度的四月半活动,这次活动是由今日头条赞助. 今日头条的乐乐同学在广场上出了一道题,谁答对,就能获得他的祝福哦. 题目如下: 勾股定理是初中数学的重要定理.它的内容是:直角三角形中,两直角边长度的平方和等于斜边长度的平方.若边c是斜边,边a和b是直角边,则a×a+b×b=c×c. 已知一个直角三角形的两边长,求第三条边的长度. 输入 只有一行,这一行有两个用空格隔开的正整数,即已知的两条边. 100%的数据,给出的边长大于

喵哈哈村的魔法考试 Round #10 (Div.2) B

喵哈哈村与哗啦啦村的大战(二) 发布时间: 2017年3月27日 09:25   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村因为和哗啦啦村争夺稀有的水晶资源,展开了激烈的战斗. 喵哈哈村与哗啦啦村战斗的地图可以视为一个二维平面. 喵哈哈村准备修建n个防御工事,唯一的要求就是任意两个防御工事之间的距离不得大于R. 在喵哈哈村修建完防御工事之后,哗啦啦村准备选择一个防御工事进行攻击,这个防御工事包括离被攻击防御工事距离小于等于r的防御工事都将被摧毁.其中:R*R=2*r*r.