弱联通

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<map>
  5. #include<cmath>
  6. #include<queue>
  7. #include<stack>
  8. #include<vector>
  9. #define inf 0x3f3f3f3f
  10. #define N 10005
  11. #define M 40005
  12. typedef long long LL;
  13. using namespace std;
  14. stack<int>st;
  15. int value[N];
  16. struct Node{
  17. int to,next;
  18. }edge[M];
  19. int tol,head[N];
  20. struct rNode{
  21. int to,next;
  22. }redge[M];
  23. int rtol,rhead[N];
  24. void addedge(int u,int v){
  25. edge[tol].to=v; edge[tol].next=head[u]; head[u]=tol++;
  26. }
  27. void raddedge(int u,int v){
  28. redge[rtol].to=v; redge[rtol].next=rhead[u]; rhead[u]=rtol++;
  29. }
  30. int Belong[N],val[N],visit[N],Low[N],Dfn[N],cnt,scc,Ans,Sum;
  31.  
  32. void Tarjan(int x,int father){
  33. int i,j,flag=0;
  34. Low[x]=Dfn[x]=cnt++;
  35. visit[x]=1;
  36. st.push(x);
  37. for(i=head[x];i!=-1;i=edge[i].next){
  38. int y=edge[i].to;
  39. if(y==father && !flag) { flag=1; continue; }
  40. if(!visit[y]) Tarjan(y,x);
  41. Low[x]=min(Low[x],Low[y]);
  42. }
  43. if(Dfn[x]==Low[x]){
  44. scc++; int v;
  45. do{
  46. v=st.top();
  47. st.pop();
  48. Belong[v]=scc;
  49. val[scc]+=value[v];
  50. }while(v!=x);
  51. }
  52. }
  53. int Min(int a,int b){
  54. if(a>b) return b;
  55. return a;
  56. }
  57. int dfs(int x,int father){
  58. int i,j;
  59. int sum=val[x];
  60. for(i=rhead[x];i!=-1;i=redge[i].next){
  61. int y=redge[i].to;
  62. if(y==father) continue;
  63. sum+=dfs(y,x);
  64. }
  65. Ans=Min(Ans,abs(Sum-sum*2));
  66. return sum;
  67. }
  68. int main(){
  69. int n,m;
  70. int i,j,k;
  71. while(~scanf("%d %d",&n,&m)){
  72. Sum=0;
  73. tol=rtol=cnt=scc=0;
  74. memset(head,-1,sizeof(head));
  75. memset(rhead,-1,sizeof(rhead));
  76. memset(visit,0,sizeof(visit));
  77. memset(val,0,sizeof(val));
  78. for(i=0;i<n;i++){
  79. scanf("%d",&value[i]); Sum+=value[i];
  80. }
  81. for(i=0;i<m;i++){
  82. int a,b; scanf("%d %d",&a,&b);
  83. addedge(a,b); addedge(b,a);
  84. }
  85. Tarjan(0,0);
  86. //for(i=0;i<n;i++) printf("%d %d\n",i,Belong[i]);
  87. if(scc==1) {
  88. printf("impossible\n"); continue;
  89. }
  90. for(i=0;i<n;i++)
  91. for(j=head[i];j!=-1;j=edge[j].next){
  92. int t1=Belong[i]; int t2=Belong[edge[j].to];
  93. if(t1!=t2) raddedge(t1,t2);
  94. }
  95. Ans=inf;
  96. dfs(1,0);
  97. printf("%d\n",Ans);
  98. }
  99. return 0;
  100. }
  101. /*
  102. 【题意】
  103. 一个无向连通图 每个点有个值 求断开一条边使得形成两个联通图
  104. 并使两边的 点和之差 最小
  105.  
  106. 【做法】
  107. 弱联通缩点 之后dfs即可
  108.  
  109. 【思考】
  110. 第一写弱联通 学到了
  111.  
  112. */
  1.  

hdu2242 考研路茫茫——空调教室的更多相关文章

  1. HDU2242 考研路茫茫——空调教室 (双联通分+树形DP)

    考研路茫茫——空调教室 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. HDU 2242 考研路茫茫——空调教室 无向图缩环+树形DP

    考研路茫茫——空调教室 Problem Description 众所周知,HDU的考研教室是没有空调的,于是就苦了不少不去图书馆的考研仔们.Lele也是其中一个.而某教室旁边又摆着两个未装上的空调,更 ...

  3. HDU 2242 考研路茫茫----空调教室

    传送门 考研路茫茫——空调教室 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  4. HDU 2242 考研路茫茫——空调教室

    考研路茫茫——空调教室 http://acm.hdu.edu.cn/showproblem.php?pid=2242 分析: 树形dp,删边. 代码: #include<cstdio> # ...

  5. HDU 2242 考研路茫茫——空调教室(边双连通)

    HDU 2242 考研路茫茫--空调教室 题目链接 思路:求边双连通分量.然后进行缩点,点权为双连通分支的点权之和,缩点完变成一棵树,然后在树上dfs一遍就能得出答案 代码: #include < ...

  6. 考研路茫茫——空调教室HDU2242(Tarjan缩点)

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=2242 给你一个图,问你缩完点树上割边的做小绝对值差. 思路: 这题核算起来整整做了我一天(即24个小时)! ...

  7. 【HDOJ】2242 考研路茫茫——空调教室

    tarjan缩点,然后树形dp一下可解.重点是重边的处理. /* 2242 */ #include <iostream> #include <sstream> #include ...

  8. HDU 2242 考研路茫茫—空调教室 (边双连通+树形DP)

    <题目链接> 题目大意: 给定一个连通图,每个点有点权,现在需要删除一条边,使得整张图分成两个连通块,问你删除这条边后,两联通块点权值和差值最小是多少. 解题分析: 删除一条边,使原连通图 ...

  9. HDU 2242 考研路茫茫——空调教室(边双连通分量+树形dp+重边标号)

    http://acm.hdu.edu.cn/showproblem.php?pid=2242 题意: 思路:首先求一下双连通分量,如果只有一个双连通分量,那么无论断哪根管子,图还是连通的. 最后只需要 ...

随机推荐

  1. ES6与canvas实现鼠标小球跟随效果

    最近闲来无聊,看了下ES6的语法,结合canvas实现了动画特效--随着鼠标的移动,会有小球跟随且自动消失的动画. 首先,html部分,目前就一个canvas标签. <canvas id=&qu ...

  2. Java8之Lambda表达式基础

    Java 8中,将会提供对lambda的支持,函数式编程FP(Functional Programming)将会得到很好地支持,而函数式编程的一个重要特点就是适合并行运算. λ:希腊字母表中排序第十一 ...

  3. JavaBean命名规范

    ———————————————————————————————————————————————————————— 属性名/类型                    |                 ...

  4. 给你的jQuery项目赋予Router技能吧

    现在你不会React/Vue都不好意思说自己是前端,不过我相信很多前端项目还是基于jquery类库的传统模式的,假如你有追求的态度使用过requireJs这个库,你一定思考过一个问题,或者说一种组件化 ...

  5. JS高级程序设计第3章读书笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Kibana安装配置

    Kibana 是一个开源的分析和可视化平台,是ELK的重要部分.Kibana提供搜索.查看和与存储在 Elasticsearch 索引中的数据进行交互的功能.开发者或运维人员可以轻松地执行高级数据分析 ...

  7. Linux压缩解压命令汇总

    01-.tar格式 解包:[*******]$ tar xvf FileName.tar 打包:[*******]$ tar cvf FileName.tar DirName (注:tar是打包,不是 ...

  8. javascript 欺骗词法作用域

    如果词法作用域完全由写代码期间函数所声明的位置来定义,怎样才能在运行时来"修改"(也可以说欺骗)词法作用域呢?    JavaScript 中有两种机制来实现这个目的.社区普遍认为 ...

  9. ajax请求 readyState为0 可能原因之一

    问题:同样的代码逻辑,PC端和iOS都能正常访问,但是Android系统请求都是报错: 上网查阅,关于ajax请求失败且状态码都是0的情况有很多,最后排查的原因是:域名证书问题:

  10. JQuery 验证框架

      设计完美,可扩展性好,以后就用他了. http://docs.jquery.com/Plugins/Validation /**//** * @author ming */ $(document) ...