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. EmbossMaskFilter BlurMaskFilter 学习

    MaskFilter类可以为Paint分配边缘效果.对MaskFilter的扩展可以对一个Paint边缘的alpha通道应用转换.Android包含了下面几种MaskFilter: BlurMaskF ...

  2. Python Data Visualization Cookbook 2.9.2

    import numpy as np import matplotlib.pyplot as plt def is_outlier(points, threshold=3.5): if len(poi ...

  3. mac相关

    1 mac的动态链接库 mac基于bsd,所以它使用的是bsd风格的动态链接库,即以.dylib为后缀的动态链接库. 这个和windows的.dll和linux的.so相区分.

  4. ubuntu16.04 禁用Guest用户

    .打开终端(快捷键 Ctrl+Alt+T) .编辑50-no-guest.conf文件,按照以下命令编辑, sudo gedit /usr/share/lightdm/lightdm.conf.d/- ...

  5. java中的d单例模式

    public class SimpleDemo1 { //恶汉式 //类初始化时,立即加载这个对象(没有延时加载的优势).加载类时,天然的是线程安全的 private static final Sim ...

  6. Python学习笔记——基础篇【第七周】———FTP作业(面向对象编程进阶 & Socket编程基础)

    FTP作业 本节内容: 面向对象高级语法部分 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 参考:http://www.cnblogs.com/wupeiqi/ ...

  7. SpannableString可以被点击的文字

    1 TextView tv= (TextView) findViewById(R.id.textview_z); String text="一段可以被点击点击的文字,文字可以变成图片&quo ...

  8. python(序列递归)【输出原子级别元素。。。】

    晚上回去复习下原来的资料,返现Codebook中有个关于“展开一个嵌套序列”的话题. 任务说明:序列中的子项可能是序列,子序列的子项仍可能是序列,以此类推,则序列嵌套可以达到任意的深度.需要循环遍历一 ...

  9. 提取出图像中感兴趣的部分,cvSetImageRoi,Rect

    在做人脸检测的时候,需要从摄像头拍摄视频中把检测到的人脸区域提取出来,网上找了很多博客,发现多数都是在用cvSetImageRoi函数,该函数声明如下:void cvSetImageROI(IplIm ...

  10. jx problem

    Entity: line 37: parser error : xmlParseEntityRef: no nameecho "xxxxxx > /dev/null 2>& ...