【牛客 - 181D】小叶的巡查(树的直径,数学)
生活随笔
收集整理的這篇文章主要介紹了
【牛客 - 181D】小叶的巡查(树的直径,数学)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題干:
8102年,牛客系列競賽空前繁榮。為了更好地管理競賽,小葉決定巡查于各大城市之間,體察民情。所以,從一個城市馬不停蹄地到另一個城市成了小葉最常做的事情。小葉有一個錢袋,用于存放往來城市間的路費。
這個國家有一套優秀的交通方案,使得任何一個大城市都能從首都直接或者通過其他大城市間接到達。同時,如果不重復經過大城市,從首都到達每個大城市的方案都是唯一的。
如果不在某個城市停下來修整,在連續行進過程中,小葉所花的路費與他已走過的距離有關,在走第x-1千米到第x千米這一千米中(x是整數),他花費的路費是x+10這么多。也就是說走1千米花費11,走2千米要花費23。
因為國家力挺??拖盗懈傎?#xff0c;所以國家會給小葉報銷全部的路費。
現在組織想知道:小葉從某一個城市出發,中間不休息,到達另一個城市,所有可能花費的路費中最多是多少呢?
輸入描述:
輸入的第一行包含一個整數n,表示包括首都在內的城市數 城市從1開始依次編號,1號城市為首都。 接下來n-1行,描述高速路(高速路一定是n-1條) 每行三個整數Pi, Qi, Di,表示城市Pi和城市Qi之間有一條高速路,長度為Di千米。輸出描述:
輸出一個整數,表示小葉最多花費的路費是多少。?
示例1
輸入
復制
5 1 2 2 1 3 1 2 4 5 2 5 4輸出
復制
135備注:
n<23333解題報告:
? ?樹的直徑裸題。(因為反正是樹嘛,所以沒有環,所以bfs隨便寫就好了。那個vis[cur]=1放到外面也是ac的)
? ?再一個考點就是等差數列求和了、、、
? ?其實這個題巧就巧在是以距離為變化單位的,而不是經過的城市個數,如果加上了城市數的權值,那就復雜了、、、
AC代碼:
#include<bits/stdc++.h> #define ll long long #define mp make_pair using namespace std; const int MAX = 23333 + 5; vector<pair<int,int> > vv[MAX]; int vis[MAX],dis[MAX]; int bfs(int x,int &w) {memset(vis,0,sizeof vis);memset(dis,0,sizeof dis);int res = 0;int rep = x;queue<int> q;q.push(x);vis[x]=1;dis[x]=0;while(!q.empty()) {int cur = q.front();q.pop();for(int i = 0; i<vv[cur].size(); i++) {pair<int,int> now = vv[cur][i];if(vis[now.first]) continue;vis[now.first]=1;dis[now.first] = dis[cur] + now.second;if(dis[now.first] > res) {rep = now.first;res = dis[now.first];}q.push(now.first);}}w = res;return rep; } int main() {int n;int a,b,w;cin>>n;for(int i = 1; i<n; i++) {scanf("%d%d%d",&a,&b,&w);vv[a].push_back(mp(b,w));vv[b].push_back(mp(a,w));}int ans = 0;int u = bfs(1,ans);int v = bfs(u,ans);ll out = (ll)ans * 10 + (1 + ans) *(ll) ans / 2;printf("%lld\n",out);return 0 ;}?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【牛客 - 181D】小叶的巡查(树的直径,数学)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mssvr.exe - mssvr是什么
- 下一篇: 【HDU - 5900】QSC and