poj 3140
来源:互联网 发布:网络上怼是什么意思 编辑:程序博客网 时间:2024/06/11 03:16
艹 坑爹啊,居然是 abs函数的问题,整数的abs 居然有问题。。
题意中的m的范围也是个坑,完全可以忽略。
题意: 把一个树分成两部分,是的他们的差值最小(叶子节点有值)。
类似树形dp,其实就是个dfs,用vector优化,不然会tle的。
#include <cstdio>#include <iostream>#include <cstring>#include <vector>using namespace std;long long abs1(long long x) { // poj 系统abs跪了,我醉了 if(x < 0) return -x; return x;}int n,m;bool visit[100010]={};long long dp[100010]={};long long sum;long long ans;vector<int>mp[100010];void dfs(int root) { visit[root] = 1; int len = mp[root].size(); for(int i = 0; i < len; i++) { int y = mp[root][i]; if(visit[y] == 0) { dfs(y); dp[root] += dp[y]; } } if(abs1(sum - dp[root]*2) < ans) ans = abs1(sum - dp[root]*2);}int main() { int ca = 1; while(scanf("%d %d",&n,&m),n||m) { memset(visit,0,sizeof(visit)); memset(dp,0,sizeof(dp)); for(int i = 1; i <= n; i++) mp[i].clear(); sum = 0; for(int i = 1; i <= n; i++) { scanf("%lld",&dp[i]); sum += dp[i]; } int x,y; ans = sum; for(int i = 1; i <= m; i++) { scanf("%d%d",&x,&y); mp[x].push_back(y); mp[y].push_back(x); } dfs(1); printf("Case %d: %lld\n",ca++,ans); } return 0;}
0 0
- POJ 3140
- POJ 3140
- poj-3140
- poj 3140
- poj 1655树形dp && poj 3107 &&poj 2378 && poj 3140
- poj 3140 树形dp
- poj 3140 Contestants Division
- poj 3140 树型DP
- POJ--3140--Contestants Division
- poj 3140 Contestants Division
- poj 3140 Contestants Division
- poj 3140 简单dfs
- poj-3140-树形dp
- POJ 3140 树形dp
- POJ 3140 Contestants Division
- poj 3140(树形dp)
- POJ 3140 Contestants Division
- poj 3140 建树
- leetcode--twoSum
- 【leetcode】26. Remove Duplicates from Sorted Array
- HDU 1233
- 软件体系结构风格
- 文章标题
- poj 3140
- 关于popupwindow中含有EditText,点击无法弹出键盘的问题
- html页面中meta标签你不知道 的秘密——meta用法以及相关属性
- g++ -L 和-l && -I参数
- HDU 1875
- CentOS 安装SVN客户端
- QT国际化动态语言切换的实现(原创) (2012-02-20 11:23:20)
- 双足机器人制作准备说明之硬件系统
- 解决Eclipse界面无法显示出LogCat或Console等窗口的问题