小x游世界树

摘要:
考虑父节点和子节点之间的传输。例如,上述数据尚未通过。intcnt;从头开始,cnt意外地使用^1制作反面。一、 …..然后再次发送。它爆炸了,嗯,嗯,我打开了longlong,嗯,printf;更改为lld,A.I.…1#include<studio h>2#defineFor3usingspacestd;4约束最大值=7e5+10;5intn,a[maxn],水头[maxn},cnt=1,尺寸[maxn]ans=1;6longlongdis[maxn],del[maxn]];7structEdge{8intv,nxt,w;9}边缘[maxn˂˂1];10inlinevoiddd{11edge[++cnt].v=v,edge[cnt].w=w,edge[cnt].nxt=head[u],head[u]=cnt;12}13inlinevoid pre{14siz[p]=1,del[1]+=dis[p];15for{16intv=edge[i].v;ifcontinue;17dis[v]=dis[p]+edge[i].w;18pre(v,p);19siz[p]+=siz[v];20}21}22inlinevoididfs{23for{24intv=edge[i].v;ifcontinue;25del[v]=del[p]+*edge[i^1].w-*edge[i].w;26dfs(v,p);27}28}29signedmin(){30scanf;31Forscanf;32对于{33intb,c,d;scanf;34add,add;35}36pre(1,1);37dfs(1,1);38对于{39ifans=i;40}41printf;42}我发现什么可以是A和原始之间没有太大区别。我是一个沙雕

题源

小x游世界树第1张 


 Input

7
7 8 1 3 2 5 2
4 6 5
6 1 8
1 2 9
5 4 3
3 4 10
3 7 4

Output

1 24

一看就知道是个什么套路

记录每个点的siz , dis。在父子节点间考虑转移。

然后搞了个代码,过了个极水的样例

 1 #include<stdio.h>
 2 #define For(i,a,b) for(register int i=(a);i<=(b);i++)
 3 using namespace std;
 4 const int maxn=7e5+10;
 5 int n,a[maxn],head[maxn],cnt,siz[maxn],dis[maxn],ans=1;
 6 long long del[maxn],tot;
 7 struct Edge{
 8     int v,nxt,w;
 9 }edge[maxn<<1];
10 inline void add(int u,int v,int w){
11     edge[++cnt].v=v,edge[cnt].w=w,edge[cnt].nxt=head[u],head[u]=cnt;
12 }
13 inline void pre(int p,int fa){
14     siz[p]=1,tot+=dis[p];
15     for(int i=head[p];i;i=edge[i].nxt){
16         int v=edge[i].v;if(v==fa) continue;
17         dis[v]=dis[p]+edge[i].w;
18         pre(v,p);siz[p]+=siz[v];
19     }
20 }
21 inline void dfs(int p,int fa){
22     for(int i=head[p];i;i=edge[i].nxt){
23         int v=edge[i].v;if(v==fa) continue;
24         del[v]=del[fa]+(n-siz[v])*edge[i].w-siz[v]*edge[i^1].w;
25         dfs(v,p);
26     }
27 }
28 signed main(){
29     scanf("%d",&n);
30     For(i,1,n) scanf("%d",&a[i]);
31     For(i,2,n){
32         int b,c,d;scanf("%d%d%d",&b,&c,&d);
33         add(b,c,d-a[b]),add(c,b,d-a[c]);
34     }
35     pre(1,1);
36     dfs(1,1);
37     For(i,1,n){
38         if(del[i]<del[ans]) ans=i;
39     }
40     printf("%d %d
",ans,tot+del[ans]);
41 }

然后爆0。比如上面那个数据就没过去。

发现算法没错。

 int cnt; 

从零开始的cnt竟然用^1来搞反向边,我……

然后再来一发,爆了int

呃呃呃我开了long long啊

 printf("%d %d ",ans,del[ans]); 

改成lld, A了,我……

 1 #include<stdio.h>
 2 #define For(i,a,b) for(register int i=(a);i<=(b);i++)
 3 using namespace std;
 4 const int maxn=7e5+10;
 5 int n,a[maxn],head[maxn],cnt=1,siz[maxn],ans=1;
 6 long long dis[maxn],del[maxn];
 7 struct Edge{
 8     int v,nxt,w;
 9 }edge[maxn<<1];
10 inline void add(int u,int v,int w){
11     edge[++cnt].v=v,edge[cnt].w=w,edge[cnt].nxt=head[u],head[u]=cnt;
12 }
13 inline void pre(int p,int fa){
14     siz[p]=1,del[1]+=dis[p];
15     for(int i=head[p];i;i=edge[i].nxt){
16         int v=edge[i].v;if(v==fa) continue;
17         dis[v]=dis[p]+edge[i].w;
18         pre(v,p);
19         siz[p]+=siz[v];
20     }
21 }
22 inline void dfs(int p,int fa){
23     for(int i=head[p];i;i=edge[i].nxt){
24         int v=edge[i].v;if(v==fa) continue;
25         del[v]=del[p]+(n-siz[v])*edge[i^1].w-(siz[v])*edge[i].w;
26         dfs(v,p);
27     }
28 }
29 signed main(){
30     scanf("%d",&n);
31     For(i,1,n) scanf("%d",&a[i]);
32     For(i,2,n){
33         int b,c,d;scanf("%d%d%d",&b,&c,&d);
34         add(b,c,d-a[b]),add(c,b,d-a[c]);
35     }
36     pre(1,1);
37     dfs(1,1);
38     For(i,1,n){
39         if(del[i]<del[ans]) ans=i;
40     }
41     printf("%lld %lld
",ans,del[ans]);
42 }

发现能A的和原来没有多大差别

我是沙雕

小x游世界树第2张

免责声明:文章转载自《小x游世界树》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux-----虚拟机配置免费学习的Linux主机下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IE6浏览器常见的bug及其修复方法

IE6不支持min-height,解决办法使用css hack: .target { min-height: 100px; height: auto !important; height: 100px; // IE6下内容高度超过会自动扩展高度 } ol内li的序号全为1,不递增。解决方法:为li设置样式d...

bzoj2330: [SCOI2011]糖果(差分约束系统)

原题链接 题目描述:幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求。幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到...

CSS-三栏自适应高度

通过负边距(padding/-marging)实现三栏自适应高度; 解决思想:左边栏向左浮动,右边栏向右浮动,中间栏放到最后,不需要浮动; <div> <div class="leftSide">左边栏</div> <div class="rightSide">右边栏</div>...

inline内联函数和宏的区别

1、内联函数在编译时展开,而宏在预编译时展开 2、在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。 3、内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能。 4、宏不是函数,而inline是函数 5、宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。...

Android指针管理:RefBase,SP,WP (二)

(1)在Android中,RefBase结合了sp和wp,实现了一套通过引用计数的方法来控制对象声明周期的方法。 RefBase的定义在/frameworks/base/include/utils/RefBase.h,实现在/frameworks/base/libs/utils/RefBase.cpp。wp的定义在/frameworks/base/incl...

我的css释疑-float line-height inline-block vertical-align

markdown的图片和链接格式相类似: [链接文字/图片的alt text] (链接地址/ 图片的地址), 只是图片要在前面加上感叹号! 当内容中含有图片的时候,如果图片的高度大于行高,则含有图片 行的行框将被撑开到图片的高度 注意:图片虽然撑开了行框,但是不会影响行高,因此也不会影响到基于行高来计算的其他属性。 提示:当行内含有图片的时候,图片和文字...