【POJ 3140】 Contestants Division(树型dp)
来源:互联网 发布:淘宝优惠券网站怎么做 编辑:程序博客网 时间:2024/06/08 15:44
Description
In the new ACM-ICPC Regional Contest, a special monitoring and submitting system will be set up, and students will be able to compete at their own universities. However there’s one problem. Due to the high cost of the new judging system, the organizing committee can only afford to set the system up such that there will be only one way to transfer information from one university to another without passing the same university twice. The contestants will be divided into two connected regions, and the difference between the total numbers of students from two regions should be minimized. Can you help the juries to find the minimum difference?
Input
There are multiple test cases in the input file. Each test case starts with two integersN and M, (1 ≤ N ≤ 100000, 1 ≤ M ≤ 1000000), the number of universities and the number of direct communication line set up by the committee, respectively. Universities are numbered from 1 toN. The next line has N integers, the Kth integer is equal to the number of students in university numberedK. The number of students in any university does not exceed 100000000. Each of the followingM lines has two integers s, t, and describes a communication line connecting universitys and university t. All communication lines of this new system are bidirectional.
N = 0, M = 0 indicates the end of input and should not be processed by your program.
Output
For every test case, output one integer, the minimum absolute difference of students between two regions in the format as indicated in the sample output.
Sample Input
7 61 1 1 1 1 1 11 22 73 74 66 25 70 0
Sample Output
Case 1: 1
Source
。。。发现训练计划树dp的难度是递减的……不要说什么做多了熟练了。。真的是递减的。。这个很适合入门……结果就被垫底了,。可能不是有意的……但像我这种喜欢从上往下刷的………………
题目大意:几个学校间有连接,并且保证是树状连接,现在要在某条线路(树边)上搭载系统,为了减少负荷,要让系统两边的学生数量差值尽量少
dfs的时候可以遍历到所有的边,这样每条边的孩子所在的子树的所有节点权值(学生数)很容易求出,然后用总学生数减去它,就是树边的另一边的所有学生数了。
代码如下:
#include <iostream>#include <cmath>#include <vector>#include <cstdlib>#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <list>#include <algorithm>#include <map>#include <set>#define LL long long#define Pr pair<int,int>#define fread() freopen("in.in","r",stdin)#define fwrite() freopen("out.out","w",stdout)using namespace std;const int INF = 0x3f3f3f3f;const int msz = 10000;const int mod = 1e9+7;const double eps = 1e-8;struct Edge{int v,next;};Edge eg[2333333];int head[233333];int val[233333];LL dp[233333];int n,m;LL sum,mn;void dfs(int u,int pre){dp[u] = val[u];for(int i = head[u]; i != -1; i = eg[i].next){int v = eg[i].v;if(v == pre) continue;dfs(v,u);LL tmp = sum-dp[v]*2;if(tmp < 0) tmp = -tmp;if(mn == -1) mn = tmp;else mn = min(mn,tmp);dp[u] += dp[v];}}int main(){//fread();//fwrite();int u,v,z = 1;while(~scanf("%d%d",&n,&m) && (n+m)){sum = 0;for(int i = 1; i <= n; ++i){scanf("%d",&val[i]);sum += val[i];}int tp = 0;memset(head,-1,sizeof(head));for(int i = 0; i < m; ++i){scanf("%d%d",&u,&v);eg[tp].v = v;eg[tp].next = head[u];head[u] = tp++;eg[tp].v = u;eg[tp].next = head[v];head[v] = tp++;}mn = -1;dfs(1,1);printf("Case %d: %lld\n",z++,mn);}return 0;}
- 【POJ 3140】 Contestants Division(树型dp)
- POJ 3140 Contestants Division 树型DP删边
- poj 3140 Contestants Division(树dp)
- poj 3140 Contestants Division(树dp)
- POJ 3140 Contestants Division(树形DP)
- poj 3140 Contestants Division (树形dp)
- POJ 3140 Contestants Division(树形DP)
- (POJ 3140 Contestants Division)树型DP + 删边
- poj 3140 Contestants Division(树形dp? dfs计数+枚举)
- POJ 3140 Contestants Division (删边,简单树形DP)
- Contestants Division - POJ 3140 树形dp
- poj 3140 Contestants Division(树形dp)
- [poj 3140] Contestants Division 树形DP
- POJ 3140 Contestants Division 简单树形DP
- POJ 3140 Contestants Division 树形dp
- 【POJ】3140 Contestants Division 树形dp
- POJ-3140 Contestants Division(树dp)
- poj 3140 Contestants Division
- 什么是OCA?
- SSH登陆,增加互信,免密码登陆
- NBUT 1647 (多校连萌3)
- iOS7以后,sizeWithFont方法被弃用。
- Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(1)
- 【POJ 3140】 Contestants Division(树型dp)
- 在Windows下Android Studio 中配置Genymotion和Git等环境
- spring中的设计模式
- 蓝牙设计问与答
- 【Data Algorithms_Recipes for Scaling up with Hadoop and Spark】Chapter 9 Recommendation Items
- 正则表达式使用
- AngularJS单页面应用的5大缺陷
- matlab图像处理函数小结
- socket的半包,粘包与分包的问题