第一行包含乙個整數n,表示城市c中的建築和道路數目。
接下來n行,每行3個整數,ai,bi,li(1≤i≤n;li>0),表示一條道路連線了建築ai與bi,其長度為li 。
僅包含乙個實數,四捨五入保留恰好一位小數,表示最佳快餐店選址距離最遠使用者的距離。
注意:你的結果必須恰好有一位小數,小數字數不正確不得分。
1 2 1
1 4 2
1 3 2
2 4 1
2.0資料範圍
對於 10%的資料,n<=80,li=1;
對於 30%的資料,n<=600,li<=100;
對於 60% 的資料,n<=2000,li<=10^9;
對於 100% 的資料,n<=10^5,li<=10^9
這個dp有點屌……
1 #include 2 #include 3 #include 4using
namespace
std;
5 typedef long
long
ll;6
const
int n=100010;7
int n,cnt,fir[n],nxt[n<<1],to[n<<1
];8 ll val[n<<1
],dis[n],ans,sum,mx;
9ll u1[n],v1[n],b[n],c[n];
10ll u2[n],v2[n];
11bool
ring[n];
12void addedge(int a,int b,int
v)18
19int
id[n],tot;
20int
st[n],top;
21int
pre[n];
22void dfs(int
x)31
else
if(id[y]>id[x])
38 st[++top]=x;
39 b[top]=val[i];
40 ring[x]=true;41
return;42
}43}44
}4546void dp(int x,int
fa)53}54
55int
main()
63 dfs(1
);64
for(int i=1;i<=top;i++)dp(st[i],0
);65
66for(int i=1;i<=top;i++)
72 ll tmp=b[top];mx=sum=b[top]=0;73
for(int i=top;i>=1;i--)
79 ll mn=v1[top];
80for(int i=1;i)
81 mn=min(mn,max(max(v1[i],v2[i+1]),tmp+u1[i]+u2[i+1
]));
82 ans=max(ans,mn);
83 printf("
%.1lf
",ans/2.0
);
84return0;
85 }
樹DP 基環樹 NOI2013 快餐店
小 t 打算在城市 c 開設一家外送快餐店。送餐到某乙個地點的時間與外賣店到該地點之間最短路徑長度是成正比的,小 t 希望快餐店的位址選在離最遠的顧客距離最近的地方。快餐店的顧客分布在城市 c 的 n 個建築中,這 n個建築通過恰好 n 條雙向道路連線起來,不存在任何兩條道路連線了相同的兩個建築。任...
NOI2013 快餐店 環套樹 線段樹
題目大意 給你一顆環套樹,你要在這棵的邊上 包括端點 找乙個點,使得離該點最遠的點最近。資料範圍 n 10 5 邊權 10 9 此題不難看出一種暴力做法,我們依次斷開環上的一條邊,然後求整顆樹的直徑,取個 min 就好了,時間複雜度是 o n 2 的。然而顯然會 t 我們考慮一些優秀的做法,我們首先...
NOI2013 矩陣遊戲
據學長的話來說 這是當年noi最簡單的一道題 於是抱著試一試的心態做了一做 蒟蒻qaq 由於矩陣乘法不會,只能數學必修的種數列知識推公式 先橫向推 f x k a f x 1 k 展開就可以得到乙個等比數列 然後根據等比數列的性質可得 fx ax 1 f1 b ax 1 1 a 1 至此我們完成了將...