C - 哗啦啦村的扩建

Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 512000/256000KB (Java/Others)

Problem Description

呀呀呀,哗啦啦村在日渐发展中,越来越大了。

唐老师看到这欣欣向荣的情景,感到非常开心。

狗哥在旁边,“喏,我们村子扩建这么快,肯定用了不少钱吧?”

唐老师说:“是呀,不过这些钱都不及我零花钱的万万分之一。”

那么这时候问题来了,唐老师的零花钱至少应该有多少钱呢?

狗哥也想知道这道题的答案,于是他拜托了青君同学,了解到了村子扩建的费用。

啊,原来村子的扩建费用,就是修建道路的费用。

整个村子可以看作有n个房子,村子会修建n-1条道路,保证从任意房子可以到达任意其他房子。

那修建这n-1条道路的费用怎么记呢?对于每条道路,假设这条道路左边有x个房子,右边有y个房子,这条道路长度为k,那么费用就是k*|x-y|。

那么唐老师的零花钱至少有多少钱呢?现在你应该知道了吧。

Input

第一行一个整数,表示这个村子有n个房子

接下来n-1行,表示每条道路的信息,三个整数 a,b,c,表示a,b之间有一条道路,这条路的长度为c

1<=n<=50,000

1≤ai, bi≤n

0 ≤ci≤ 10^6

Output

输出一个整数,表示唐老师的零花钱至少有多少钱

Sample Input

6
1 2 1
1 3 1
1 4 2
6 3 1
5 2 1

Sample Output

2000000000
题目大意:
  输入N,表示有N个点,然后下面有N-1条边,(这些边能够构成树,不会出现环或者孤立点,题目限定的),每一条边上有权值k,要求这条边的费用,则
设这条边左边的点数为x,右边的点数为y,这条边的费用=k*|x-y|,统计全部边的费用即可。输出费用,如果非0,在加上00000000,否则输出0.
解法:
  用邻接表来保存这一无向图,然后,从这无向图的任意某一点,去他的查找子节点,用Count[i]统计以点i为节点所包含点的个数。
依次更新每一条边上的值,然后累加即可。详情请见代码:
 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 50010 /*点数*/
typedef long long LL;
using namespace std;
LL Sum_Num;
int Len;
int Point[MAX];
int Count[MAX];
int First[MAX]; /*First[x]:x表示头结点为x,First[x]表示下一条边的编号*/
struct edge
{
int TO; /*下一个顶点*/
int Next; /*记录下一条边的编号*/
LL Vlaue; /*权值*/
}ID[*MAX]; /*边表,无向图的边数记得多弄些*/ int SIGN;/*链表的边数,链表的边数=无向图边数*2=有向图边数,初始化为1*/ void Add_E(int x,int y,int z) /*添加边*/
{
ID[SIGN].TO=y;
ID[SIGN].Vlaue=z;
ID[SIGN].Next=First[x];
First[x]=SIGN++;
} int ABS(int Num)
{
if(Num>=)return Num;
else return -Num;
}
void DFS(int x)
{
int i;
Point[x]=;
for(i=First[x];i!=;i=ID[i].Next)
{
if(Point[ID[i].TO]==)continue;
else
{
DFS(ID[i].TO);
Count[x]+=Count[ID[i].TO];/*更新点数*/ ID[i].Vlaue=ID[i].Vlaue*ABS(Len-*Count[ID[i].TO]);
/*printf("(%d-%d):%d\n",x,ID[i].TO,ID[i].Vlaue);*/
Sum_Num+=ID[i].Vlaue;/*更新费用,累加费用*/
}
}
}
void Deal()
{
int i,j,k;
Sum_Num=;
DFS();/*可从任意点出发*/
if(Sum_Num!=)
printf("%lld00000000\n",Sum_Num);
else printf("0\n"); } int main()
{
int N,M;
int x,y,z,i;
while(scanf("%d",&N)!=EOF)
{
SIGN=;M=N-;Len=N;
for(i=;i<=N;i++)/*初始化*/
{First[i]=;Point[i]=;Count[i]=;}
for(i=;i<=M;i++)
{
scanf("%d %d %d",&x,&y,&z);
Add_E(x,y,z);
Add_E(y,x,z);
}
Deal();
}
return ;
} /*
6
1 2 1
1 3 1
1 4 2
6 3 1
5 2 1 8
1 2 1
2 3 1
3 5 1
3 6 1
2 4 1
4 7 1
4 8 1 */

C - 哗啦啦村的扩建的更多相关文章

  1. qsc oj 22 哗啦啦村的刁难(3)(随机数,神题)

    哗啦啦村的刁难(3) 发布时间: 2017年2月28日 20:00   最后更新: 2017年2月28日 20:01   时间限制: 1000ms   内存限制: 128M 描述 哗啦啦村作为喵哈哈村 ...

  2. 喵哈哈村的魔法考试 Round #15 (Div.2) 题解

    哗啦啦村的奇迹果实(一) 题解:显然答案就是最大值减去最小值. #include<bits/stdc++.h> using namespace std; const int maxn = ...

  3. 喵哈哈村的魔法考试 Round #10 (Div.2) 题解

    喵哈哈村与哗啦啦村的大战(一) 最大值就是全部+3,最小值就是全部-3,注意不能降为负数. #include<bits/stdc++.h> using namespace std; con ...

  4. 喵哈哈村的魔法考试 Round #3 (Div.2) ABCDE

    官方题解:http://www.cnblogs.com/qscqesze/p/6480284.html 哗啦啦村的刁难(1) 描述 哗啦啦村作为喵哈哈村的对头,于是他们准备给喵哈哈村一个好看. 哗啦啦 ...

  5. A - 小彭玉的扫荡食堂计划

    A - 小彭玉的扫荡食堂计划 Time Limit: 20000/10000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  6. 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

  7. [SinGuLaRiTy] 2017 百度之星程序设计大赛-资格赛

    [SinGuLaRiTy-1034] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 度度熊保护村庄  Time Limit: 2000/10 ...

  8. 山东省滕州市木石镇化石沟村QQ群116528924

    山东省滕州市木石镇化石沟村QQ群116528924

  9. acdream 1738 世风日下的哗啦啦族I 分块

    世风日下的哗啦啦族I Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...

随机推荐

  1. CodeForces 689E Mike and Geometry Problem

    离散化,树状数组,组合数学. 这题的大致思路和$HDU$ $5700$一样.都是求区间交的问题.可以用树状数组维护一下. 这题的话只要计算每一个$i$被统计了几次,假设第$i$点被统计了$ans[i] ...

  2. Unity人工智能学习—确定性AI算法之追踪算法二

    转自:http://blog.csdn.net/zhangxiao13627093203/article/details/47658673 上一篇讲到了追踪算法的比较简单的形式,看上去比较假,因为AI ...

  3. linux配置更改yum源

    1,进入yum源配置目录 cd /etc/yum.repos.d 2,备份系统自带的yum源mv CentOS-Base.repo CentOS-Base.repo.bk下载163网易的yum源:wg ...

  4. matlab里plot画多幅图像、设置总标题、legend无边框

    %%绘图 suptitle('公路')  %总标题subplot(2,2,1);plot(x,y11,'r-') hold onplot(x,y21,'b-')xlabel('方向')ylabel(' ...

  5. Maven编译可执行jar

    打包: 第一种情况:独立项目,且无第三方依赖包 这种情况下,我们需要maven的maven-jar-plugin插件来帮我们打包.请在项目pom.xml中的plugin配置处加入如下内 <plu ...

  6. 写入XML文件

    public static void writeXMLFile(Document doc,String xmlFileName) throws IOException{  OutputFormat f ...

  7. Python入门学习

    1.访问www.python.org/download下载并安装Python3版本 2.命令行输入python启动交互式命令shell,>>>代表当前行用户的输入 3.基本算数运算: ...

  8. JavaScript 作用域 匿名函数 模仿块级作用域(私有作用域)

    作用域 对于有块级作用域的语言来说,for语句中定义并初始化的变量i在循环外是无法访问的. 而javascript没有块级作用域,for语句中定义的变量i在循环结束后,依旧会存在于循环外部的执行环境( ...

  9. s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法

    python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf ...

  10. sql 将某列转换成一个字符串 for xml path用法

    declare @test table( name varchar(10)) insert into @test values('a') insert into @test values('b') i ...