您的位置:首页 > 其它

51Nod 算法马拉松21(迎新年)

2017-01-05 20:57 295 查看

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=100010;
struct edge{int u,v,w;}e[maxn];
void bfs();
vector<int>G[maxn];
int n,q[maxn],prt[maxn]={0},size[maxn]={0};
long long ans=0;
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
G[e[i].u].push_back(e[i].v);
G[e[i].v].push_back(e[i].u);
}
bfs();
for(int i=1;i<n;i++){
if(prt[e[i].u]==e[i].v)swap(e[i].u,e[i].v);
int s=min(size[e[i].v],size[1]-size[e[i].v]);
ans+=(long long)s*e[i].w;
}
printf("%lld",ans);
return 0;
}
void bfs(){
int head=0,tail=0;
q[tail++]=1;
while(head!=tail){
int x=q[head++];
size[x]=1;
for(int i=0;i<(int)G[x].size();i++)if(G[x][i]!=prt[x]){
prt[G[x][i]]=x;
q[tail++]=G[x][i];
}
}
for(int i=n;i;i--){
int x=q[i];
size[prt[x]]+=size[x];
}
}
View Code 附官方题解:

(话说构造法真的可行嘛……我仍然理解不了贪心构造……只会写O(n2m2)的费用流……囧囧囧)

反思:

这次打比赛的时候有点着急,B题也没有耐心仔细想/写,发挥并不太好。

A题看见别人神速过题之后就有点慌了,一改求稳的作风,凭着直觉交了一份代码,能A估计是运气。今后的比赛或者是考试一定要求稳,毕竟无缘无故掉了几十分上百分可是很要命的。

 

下一站,UOJ Test Round #2。

加油。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: