hdu2242 考研路茫茫——空调教室
弱联通
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#define inf 0x3f3f3f3f
#define N 10005
#define M 40005
typedef long long LL;
using namespace std;
stack<int>st;
int value[N];
struct Node{
int to,next;
}edge[M];
int tol,head[N];
struct rNode{
int to,next;
}redge[M];
int rtol,rhead[N];
void addedge(int u,int v){
edge[tol].to=v; edge[tol].next=head[u]; head[u]=tol++;
}
void raddedge(int u,int v){
redge[rtol].to=v; redge[rtol].next=rhead[u]; rhead[u]=rtol++;
}
int Belong[N],val[N],visit[N],Low[N],Dfn[N],cnt,scc,Ans,Sum; void Tarjan(int x,int father){
int i,j,flag=0;
Low[x]=Dfn[x]=cnt++;
visit[x]=1;
st.push(x);
for(i=head[x];i!=-1;i=edge[i].next){
int y=edge[i].to;
if(y==father && !flag) { flag=1; continue; }
if(!visit[y]) Tarjan(y,x);
Low[x]=min(Low[x],Low[y]);
}
if(Dfn[x]==Low[x]){
scc++; int v;
do{
v=st.top();
st.pop();
Belong[v]=scc;
val[scc]+=value[v];
}while(v!=x);
}
}
int Min(int a,int b){
if(a>b) return b;
return a;
}
int dfs(int x,int father){
int i,j;
int sum=val[x];
for(i=rhead[x];i!=-1;i=redge[i].next){
int y=redge[i].to;
if(y==father) continue;
sum+=dfs(y,x);
}
Ans=Min(Ans,abs(Sum-sum*2));
return sum;
}
int main(){
int n,m;
int i,j,k;
while(~scanf("%d %d",&n,&m)){
Sum=0;
tol=rtol=cnt=scc=0;
memset(head,-1,sizeof(head));
memset(rhead,-1,sizeof(rhead));
memset(visit,0,sizeof(visit));
memset(val,0,sizeof(val));
for(i=0;i<n;i++){
scanf("%d",&value[i]); Sum+=value[i];
}
for(i=0;i<m;i++){
int a,b; scanf("%d %d",&a,&b);
addedge(a,b); addedge(b,a);
}
Tarjan(0,0);
//for(i=0;i<n;i++) printf("%d %d\n",i,Belong[i]);
if(scc==1) {
printf("impossible\n"); continue;
}
for(i=0;i<n;i++)
for(j=head[i];j!=-1;j=edge[j].next){
int t1=Belong[i]; int t2=Belong[edge[j].to];
if(t1!=t2) raddedge(t1,t2);
}
Ans=inf;
dfs(1,0);
printf("%d\n",Ans);
}
return 0;
}
/*
【题意】
一个无向连通图 每个点有个值 求断开一条边使得形成两个联通图
并使两边的 点和之差 最小 【做法】
弱联通缩点 之后dfs即可 【思考】
第一写弱联通 学到了 */
hdu2242 考研路茫茫——空调教室的更多相关文章
- HDU2242 考研路茫茫——空调教室 (双联通分+树形DP)
考研路茫茫——空调教室 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 2242 考研路茫茫——空调教室 无向图缩环+树形DP
考研路茫茫——空调教室 Problem Description 众所周知,HDU的考研教室是没有空调的,于是就苦了不少不去图书馆的考研仔们.Lele也是其中一个.而某教室旁边又摆着两个未装上的空调,更 ...
- HDU 2242 考研路茫茫----空调教室
传送门 考研路茫茫——空调教室 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 2242 考研路茫茫——空调教室
考研路茫茫——空调教室 http://acm.hdu.edu.cn/showproblem.php?pid=2242 分析: 树形dp,删边. 代码: #include<cstdio> # ...
- HDU 2242 考研路茫茫——空调教室(边双连通)
HDU 2242 考研路茫茫--空调教室 题目链接 思路:求边双连通分量.然后进行缩点,点权为双连通分支的点权之和,缩点完变成一棵树,然后在树上dfs一遍就能得出答案 代码: #include < ...
- 考研路茫茫——空调教室HDU2242(Tarjan缩点)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=2242 给你一个图,问你缩完点树上割边的做小绝对值差. 思路: 这题核算起来整整做了我一天(即24个小时)! ...
- 【HDOJ】2242 考研路茫茫——空调教室
tarjan缩点,然后树形dp一下可解.重点是重边的处理. /* 2242 */ #include <iostream> #include <sstream> #include ...
- HDU 2242 考研路茫茫—空调教室 (边双连通+树形DP)
<题目链接> 题目大意: 给定一个连通图,每个点有点权,现在需要删除一条边,使得整张图分成两个连通块,问你删除这条边后,两联通块点权值和差值最小是多少. 解题分析: 删除一条边,使原连通图 ...
- HDU 2242 考研路茫茫——空调教室(边双连通分量+树形dp+重边标号)
http://acm.hdu.edu.cn/showproblem.php?pid=2242 题意: 思路:首先求一下双连通分量,如果只有一个双连通分量,那么无论断哪根管子,图还是连通的. 最后只需要 ...
随机推荐
- Java:对象的强、软、弱和虚引用[转]
原文链接:http://zhangjunhd.blog.51cto.com/113473/53092/ 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...
- C语言深度剖析-笔记
关键字: C语言关键字32个: 关键字 意 义 auto 声明自动变 ...
- ZOJ [P2314] 无源汇点有上下界模版
对于有上下界的网络流来说,我们可以分离出必要弧,然后将必要弧切开,两端分别连接源点和汇点,原图有可行解充要于源点或汇点满流. 这样求下来,只能求出可行流 #include <iostream&g ...
- BZOJ 1097: [POI2007]旅游景点atr [DP 状压 最短路]
传送门 题意: 一个无向图,从$1$到$n$,要求必须经过$2,3,...,k+1$,给出一些限制关系,要求在经过$v \le k+1$之前必须经过$u \le k+1$ 求最短路 预处理出$1... ...
- BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
2822: [AHOI2012]树屋阶梯 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 779 Solved: 453[Submit][Status] ...
- Matplotlib学习笔记(一)
原 matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .ca ...
- Nginx配置参数中文说明
#定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debu ...
- javac编译乱码
PersonTest.java:1: 错误: 非法字符: \65279 解决途径如下 用记事本打开java源文件,另存为ANSI格式 如果java文件包含中文字符,使用-encoding gbk格式进 ...
- chrome浏览器下JavaScript实现clipboard时无法访问剪切板解决方案
在用JavaScript实现某个简单的复制到剪切板功能的时候,会考虑一下浏览器兼容性,主要是重点在IE和FireFox,把这个两个浏览器搞定后,基本上其他浏览器也不用太操心了,Chrome也一样,没出 ...
- Mybatis学习之道(一)
本例子为采用的mysql+maven+mybatis构建. 初步学习mybatis: mybatis为一个半自动框架,相对于hibernate来说他更加轻巧,学习成本更低. 1.新建一个maven工程 ...