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 ...
随机推荐
- Photoshop定义画笔选区为空的原因
定义画笔预设时,选择选区后需填充黑色,否则将出现选区为空的提示
- 用python做中文自然语言预处理
这篇博客根据中文自然语言预处理的步骤分成几个板块.以做LDA实验为例,在处理数据之前,会写一个类似于实验报告的东西,用来指导做实验,OK,举例: 一,实验数据预处理(python,结巴分词)1.对于爬 ...
- Chapter 2 Open Book——38
I looked around me to make sure it was clear. 我看了我周围一圈确定都是干净的. 我看看四周,以确认前后没有来车. That's when I notice ...
- js数组中的注意
1.数组删除 2.数组合并 3.原数组会被修改的数组方法有: 1)排序 .sotr() 2)逆序 .reverse() 3)数组拼接 .splice()
- Openjudge-NOI题库-简单算术表达式求值
题目描述 Description 两位正整数的简单算术运算(只考虑整数运算),算术运算为: +,加法运算:-,减法运算:*,乘法运算:/,整除运算:%,取余运算. 算术表达式的格式为(运算符前后可能有 ...
- Select In SQL Server-Cross Instance in same domain and different domain
Same Domain: Exec sp_addlinkedserver 'PC087':Add Remote Server Exec sp_dropserver 'InstcanceName':De ...
- 灾情巡视C语言代码
/*"水灾巡视问题"模拟退火算法.这是一个推销员问题,本题有53个点,所有可能性大约为exp(53),目前没有好方法求出精确解,既然求不出精确解,我们使用模拟退火法求出一个较优解, ...
- 关于angularjs依赖注入的整理
初学angularjs阶段,刚刚看到菜鸟教程的angularjs依赖注入.现在整理一下: 1.含义:一个或更多的依赖(可以理解为模块关系依赖)或服务(分为内建服务[例如$http,$tiomeout等 ...
- 在cmd中设置字体
1.首先在cmd中输入chcp 65001 回车(通过 chcp命令改变代码页,UTF-8的代码页为65001) 2.右击命令提示符的标题栏点击属性. 3.在属性中选择字体后点击确认即可.
- iis服务器上面使用百度编辑器ueidtor提示“找不到临时文件”需要给window/temp修改权限
iis服务器上面使用百度编辑器ueidtor提示“找不到临时文件”需要给window/temp修改权限,修改php上传临时文件window/temp 给user用户组读取和写入的权限