博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3140 树形去边差异最小
阅读量:5248 次
发布时间:2019-06-14

本文共 1703 字,大约阅读时间需要 5 分钟。

http://poj.org/problem?id=3140

 

依然是差异最小问题,不过这次是去边。思路是这样的,先记录每个点的子节点个数,然后遍历每个边。

有两个问题要注意:

abs可能会出编译适配问题,可以自己写一个

INF对LL是不够用的,所以加了个INFL

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define mem(a,b) memset(a,b,sizeof(a))#define pf printf#define sf scanf#define spf sprintf#define pb push_back#define debug printf("!\n")#define MAXN 110000+5#define MAX(a,b) a>b?a:b#define blank pf("\n")#define LL long long#define ALL(x) x.begin(),x.end()#define INS(x) inserter(x,x.begin())#define pqueue priority_queue#define Rabs(a) (a<0?-a:a)#define INF 0x3f3f3f3f#define INFL 0x3f3f3f3f3f3f3f3fint n,m;struct node{ int y,val,next;}tree[MAXN<<2];int head[MAXN],vis[MAXN],ptr=1,dp[MAXN];LL num[MAXN],sum,ans,a[MAXN];void init(){ mem(head,-1); mem(vis,0); mem(dp,0); ans =INFL; sum =0; ptr=1;}void add(int x,int y){ tree[ptr].y = y; tree[ptr].next = head[x]; head[x] = ptr++;}void dfs(int rt){ vis[rt]=1; num[rt] = a[rt]; for(int i = head[rt];i!=-1;i=tree[i].next) { int y = tree[i].y; if(vis[y]) continue; dfs(y); num[rt]+=num[y]; }}int main(){ int i,j,k,kase=1; while(~sf("%d%d",&n,&m) && n+m) { init(); for(i=1;i<=n;i++) { sf("%I64d",&a[i]); sum+=a[i]; } for(i=1;i<=m;i++) { int x,y; sf("%d%d",&x,&y); add(x,y); add(y,x); } dfs(1); for(i=1;i<=n;i++) { for(j=head[i];j!=-1;j=tree[j].next) { int y = tree[j].y; LL tp = num[y]; ans = min(ans,Rabs((sum-2*tp))); //pf("t%d %d %d %d\n",i,ans,sum,2*num[y]); } } pf("Case %d: %I64d\n",kase++,ans); }}

 

转载于:https://www.cnblogs.com/qlky/p/5854953.html

你可能感兴趣的文章
(转)AWK函数
查看>>
linux ---- diff命令
查看>>
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
day15前端(回顾+JavaScript)
查看>>
HttpUrlConnection 请求
查看>>
SpringBoot 之Actuator.
查看>>
全排列
查看>>
cve-2010-2553 CVDecompress 函数堆溢出漏洞
查看>>
从原理上理解如何由震源机制一个节面的解:strike,dip,rake可以求出另一个节面的解...
查看>>
web_day4_css_宽度
查看>>
fidder抓包调试神器
查看>>
619. [金陵中学2007] 传话
查看>>
rsync数据同步备份
查看>>
C# Language Specification
查看>>
devenv.exe assert failure
查看>>
微服务之服务中心—Eureka
查看>>
Visual Studio 2013 C++ 系统找不到指定文件。
查看>>
centos 安装mysql冲突解决方法
查看>>
你做过最有效的提高你的编程水平的事是什么
查看>>
各种语言web性能简单对比测试
查看>>