BZOJ2435: [Noi2011]道路修建

本文分享了一道C++图论题目——2435的解答过程,利用递归进行深度优先搜索,计算树状结构中各节点的大小及其贡献值,最终得出答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这种水题真是……没一次AC都不好意思见人啊

P.S. LINUX无限栈真是爽炸了… 我爱递归

 1 /**************************************************************
 2     Problem: 2435
 3     User: zhuohan123
 4     Language: C++
 5     Result: Accepted
 6     Time:5320 ms
 7     Memory:93192 kb
 8 ****************************************************************/
 9  
10 #include <iostream>
11 #include <cstdio>
12 using namespace std;
13 inline int iabs(int a){return a<0?-a:a;}
14 inline int getnum()
15 {
16     int ans=0;char ch=getchar();
17     while(ch<'0'||ch>'9')ch=getchar();
18     while(ch>='0'&&ch<='9')ans=ans*10+ch-'0',ch=getchar();
19     return ans;
20 }
21 int n;
22 struct point{int head,f,size;}p[1100000];
23 struct edge{int next,to,c;}g[2100000];int gnum;
24 void addedge(int from,int to,int c)
25 {
26     g[++gnum].to=to;g[gnum].c=c;g[gnum].next=p[from].head;p[from].head=gnum;
27 }
28 long long ans=0;
29 void dfs(int po)
30 {
31     p[po].size++;
32     for(int i=p[po].head;i;i=g[i].next)
33         if(g[i].to!=p[po].f)
34         {
35             p[g[i].to].f=po;
36             dfs(g[i].to);
37             p[po].size+=p[g[i].to].size;
38             ans+=(long long)g[i].c*iabs(n-2*p[g[i].to].size);
39         }
40 }
41 int main(int argc, char *argv[])
42 {
43     n=getnum();
44     for(int i=1;i<n;i++)
45     {
46         int u=getnum(),v=getnum(),c=getnum();
47         addedge(u,v,c);addedge(v,u,c);
48     }
49     dfs(1);
50     cout<<ans<<endl;
51     return 0;
52 }

 

转载于:https://www.cnblogs.com/zhuohan123/p/3231259.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值