记录编号 |
60298 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[NOI 2011]道路修建 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
6.878 s |
提交时间 |
2013-05-21 21:09:21 |
内存使用 |
24.25 MiB |
显示代码纯文本
- #include <cstdio>
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #define F_I "noi2011_road.in"
- #define F_O "noi2011_road.out"
- using namespace std;
- typedef long long ll;
- const ll Nx=1000010;
- ll N,f[Nx],Ans,Pr[Nx],W[Nx];
- class Node{
- public:
- ll n,w;
- Node *pr;
- }*Adj[Nx];
- class Queue{
- public:
- ll h,t,li[Nx];
- void bfs(){
- h=t=1;
- li[t++]=1;
- while(h<t){
- ll H=li[h++];
- f[H]=1;
- for(Node *p=Adj[H];p;p=p->pr)
- if(f[p->n]==0){
- li[t++]=p->n;
- Pr[p->n]=H;
- W[p->n]=p->w;
- }
- }
- while(--t)
- f[Pr[li[t]]]+=f[li[t]];
- }
- }Q;
- void add(int u,int v,int w){
- Node *p=new Node;
- p->n=v,p->w=w;
- p->pr=Adj[u];
- Adj[u]=p;
- }
- void init(){
- ll i,u,v,w;
- scanf("%lld",&N);
- memset(Adj,0,sizeof(Adj));
- for(i=1;i<N;i++){
- scanf("%lld%lld%lld",&u,&v,&w);
- add(u,v,w);
- add(v,u,w);
- }
- }
- int main(){
- freopen(F_I,"r",stdin);
- freopen(F_O,"w",stdout);
- init();
-
- Q.bfs();
-
- for(int i=2;i<=N;i++)
- Ans+=W[i]*abs(N-f[i]-f[i]);
- cout<<Ans<<endl;
-
- return 0;
- }