C - 哗啦啦村的扩建
C - 哗啦啦村的扩建
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 - 哗啦啦村的扩建的更多相关文章
- qsc oj 22 哗啦啦村的刁难(3)(随机数,神题)
哗啦啦村的刁难(3) 发布时间: 2017年2月28日 20:00 最后更新: 2017年2月28日 20:01 时间限制: 1000ms 内存限制: 128M 描述 哗啦啦村作为喵哈哈村 ...
- 喵哈哈村的魔法考试 Round #15 (Div.2) 题解
哗啦啦村的奇迹果实(一) 题解:显然答案就是最大值减去最小值. #include<bits/stdc++.h> using namespace std; const int maxn = ...
- 喵哈哈村的魔法考试 Round #10 (Div.2) 题解
喵哈哈村与哗啦啦村的大战(一) 最大值就是全部+3,最小值就是全部-3,注意不能降为负数. #include<bits/stdc++.h> using namespace std; con ...
- 喵哈哈村的魔法考试 Round #3 (Div.2) ABCDE
官方题解:http://www.cnblogs.com/qscqesze/p/6480284.html 哗啦啦村的刁难(1) 描述 哗啦啦村作为喵哈哈村的对头,于是他们准备给喵哈哈村一个好看. 哗啦啦 ...
- A - 小彭玉的扫荡食堂计划
A - 小彭玉的扫荡食堂计划 Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- [SinGuLaRiTy] 2017 百度之星程序设计大赛-资格赛
[SinGuLaRiTy-1034] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 度度熊保护村庄 Time Limit: 2000/10 ...
- 山东省滕州市木石镇化石沟村QQ群116528924
山东省滕州市木石镇化石沟村QQ群116528924
- acdream 1738 世风日下的哗啦啦族I 分块
世风日下的哗啦啦族I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...
随机推荐
- C#中的引用传递、值传递
先来说下C#中的数据类型.分值类型和引用类型两大类. 值类型:直接存储数据的值,保存在内存中 引用类型:存储对值的引用,实际上存储的就是一个内存的地址 C#预定义的简单类型,像int,float, ...
- UNIX基础--Manual Pages
联机手册 Manual Pages 最详细的使用说明文档莫过于 FreeBSD 里的联机手册了. 几乎每一个程序都会附上一份简短说明, 以介绍这个程序的的基本功能以及参数的用法. 我们能通过 man ...
- ACM-ICPC之路
自从了解到了ACM,我就坚定了参加这个比赛的信心.虽然零基础开始,但是阻挡不了我的前进之路.从大一上学期的完成二十道题,到假期完成四十道题:从第一次校赛不了解退出循环方式只完成了一道题,到大一预选赛第 ...
- unity3d和php后台简单交互--一
unity3d开发时,用PHP作为后台是个不错的选择.对一些数据吞吐量不是很大的游戏,比如某个游戏的排名,登录等等,一般的php程序能够胜任了,并且php语言简单,开发容易对数据库尤其是mysql的支 ...
- Android UI方面的学习记录
1,android:textAllCaps=“false” android5.0后有可能button的text显示全是大写,设置这个后才能正常显示小写 2,优化listview性能: 1,view重用 ...
- CSS3 Filter滤镜效果
关注到它是在一次分享会当中,很神奇,只需写一行代码就可以变身很美的视觉效果,这就是CSS3滤镜. 语法 filter:fuction(param); 如今浏览器支持情况相比以前乐观很多,点击查看兼容 ...
- MySql表操作常用语法
检查表CHECK TABLE table_name;修复表REPAIR TABLE table_name;优化表OPTIMIZE TABLE table_name;分析表ANALYZE TABLE t ...
- wpf 控件截屏
/// <summary> /// 保存截图 /// </summary> /// <param name="ui">控件名称</para ...
- Redis集合相关命令
1.无序集合集合的特性:①确定性②互异性③无序性redis的set是string类型的无序集合set元素最大可以包含(2^32-1)个元素 sadd key value1....valueN 将将元素 ...
- linux的命令使用记录
iptables禁止53端口的出包(dns) iptables -A OUTPUT -p udp --dport 53 -j DROP linux查看网络监听端口 netstat -npl 文件复制 ...