POJ 3140-Contestants Division(树形dp)
题意:
n给节点的树,分成两个联通分支,使它们大小的绝对值最小,求这个最小值。
分析:
分成两个联通分支,即删除一条边,开始看到m(边数)和n(点数)没什么关系,但题目说的是一棵树,则m==n-1,求出所有的可能的差,取最小值即可
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define N 100010
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = ;
int used[N],head[N],len,n,m;
ll dp[N],num[N],sum;
vector<int>e[N];
/*struct edge{
int t,next;
}e[N*2];
void add(int a,int b){
e[len].t=b;
e[len].next=head[a];
head[a]=len++;
}*/
ll dfs(int root){
used[root]=;
for(int i=;i<e[root].size();i++){
int son=e[root][i];
if(used[son])continue;
num[root]+=dfs(son);
if(sum>=*num[son])
dp[root]=min(dp[root],sum-*num[son]);
else
dp[root]=min(dp[root],*num[son]-sum);
}
return num[root];
}
int main()
{
int tt=;
while(~scanf("%d%d",&n,&m)){
if(n==&&m==)break;
sum=;
for(int i=;i<=n;++i){
dp[i]=INFll;
used[i]=;
e[i].clear();
scanf("%I64d",&num[i]);
sum+=num[i];
}
int a,b;
for(int i=;i<m;++i){
scanf("%d%d",&a,&b);
e[a].push_back(b);
e[b].push_back(a);
}
ll minv;
if(n==)
minv=num[];
else{
dfs();
minv=dp[];
for(int i=;i<=n;++i)
if(minv>dp[i])
minv=dp[i];
}
printf("Case %d: %I64d\n",++tt,minv);
}
return ;
}
POJ 3140-Contestants Division(树形dp)的更多相关文章
- POJ 3140 Contestants Division 树形DP
		
Contestants Division Description In the new ACM-ICPC Regional Contest, a special monitoring and su ...
 - POJ 3140 Contestants Division (树dp)
		
题目链接:http://poj.org/problem?id=3140 题意: 给你一棵树,问你删去一条边,形成的两棵子树的节点权值之差最小是多少. 思路: dfs #include <iost ...
 - POJ 3140.Contestants Division 基础树形dp
		
Contestants Division Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10704 Accepted: ...
 - poj 3140 Contestants Division(树形dp? dfs计数+枚举)
		
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
 - POJ 3140 Contestants Division 【树形DP】
		
<题目链接> 题目大意:给你一棵树,让你找一条边,使得该边的两个端点所对应的两颗子树权值和相差最小,求最小的权值差. 解题分析: 比较基础的树形DP. #include <cstdi ...
 - POJ 3140 Contestants Division (树形DP,简单)
		
题意: 有n个城市,构成一棵树,每个城市有v个人,要求断开树上的一条边,使得两个连通分量中的人数之差最小.问差的绝对值.(注意本题的M是没有用的,因为所给的必定是一棵树,边数M必定是n-1) 思路: ...
 - POJ 3140 Contestants Division
		
题目链接 题意很扯,就是给一棵树,每个结点有个值,然后把图劈成两半,差值最小,反正各种扯. 2B错误,导致WA了多次,无向图,建图搞成了有向了.... #include <cstdio> ...
 - poj 3140 Contestants Division [DFS]
		
题意:一棵树每个结点上都有值,现删掉一条边,使得到的两棵树上的数值和差值最小. 思路:这个题我直接dfs做的,不知道树状dp是什么思路..一开始看到数据规模有些后怕,后来想到long long 可以达 ...
 - [poj3140]Contestants Division树形dp
		
题意:切掉树上的某条边,使分开的两棵树上各点的权值和差值最小. 与hdu2196不同的是,此题是点权,其他无太大差别,注意数据范围. 先求出每个节点的子树权值和,然后自底向上dp即可.取$\min ( ...
 - POJ 2378 Tree Cutting 3140 Contestants Division (简单树形dp)
		
POJ 2378 Tree Cutting:题意 求删除哪些单点后产生的森林中的每一棵树的大小都小于等于原树大小的一半 #include<cstdio> #include<cstri ...
 
随机推荐
- jquery全局加载函数的几种方式;
			
1.使用javascript方式(function(){})(); 2.使用jQuery(function($) {}); 3.使用$(document).ready(function(){}); 其 ...
 - python学习笔记4(列表)
			
列表是最通用的Python复合数据类型,列表中包含以逗号分隔,并在方括号([])包含的项目. 在一定程度上,列表相似C语言中的数组,它们之间的一个区别是,所有属于一个列表中的项目可以是不同的数据类型的 ...
 - xcode7 app loader error itms 90168
			
. $ cd ~/.itmstransporter . $ rm update_check* . $ mv softwaresupport softwaresupport.bak . $ ...
 - DevExpress GridControl 导出为Excel
			
private void btnExport_ItemClick(object sender, EventArgs e) { SaveFileDialog sa ...
 - 原生js获取window高和宽
			
视口的宽和高 var pw = window.innerWidth, ph = window.innerHeight; if(typeof pw != "number"){ pw ...
 - jquery取消事件冒泡和取消默认行为
			
$('button').click(functon(e){ /*code*/ e.stopPropagation();//取消事件冒泡 e.preventDefault();//取消默认行为 })
 - jstack和线程dump分析
			
转自:http://jameswxx.iteye.com/blog/1041173 一:jstack jstack命令的语法格式: jstack <pid>.可以用jps查看java进程 ...
 - flash 动画数据导出 到  coco2d-js ,cocos2d-x  问题的记录
			
1:必须搞清flash坐标系 和 cocos2d 的坐标系的差异2:对于cocos2d系列坐标系的深入理解: 以前我们常认为 coco2d-x的X,Y是相对坐标系,相对于父节点的X,Y的坐标,这种说法 ...
 - SPRING IN ACTION 第4版笔记-第九章Securing web applications-007-设置LDAP server比较密码(contextSource、root()、ldif()、)
			
一.LDAP server在哪 By default, Spring Security’s LDAP authentication assumes that the LDAP server is li ...
 - Git教程之远程仓库(9)
			
有个叫GitHub的神奇的网站,呵呵,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库. 由于本地Git仓库和GitHub仓库之 ...