HDU 2242 双连通分量 考研路茫茫——空调教室

思路就是求边双连通分量,然后缩点,再用树形DP搞一下。

代码和求强连通很类似,有点神奇,=_=,慢慢消化吧

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <algorithm>
  4 #include <vector>
  5 #include <stack>
  6 using namespace std;
  7 
  8 const int maxn = 10000 + 10;
  9 const int maxm = 20000 + 10;
 10 
 11 int n, m;
 12 int a[maxn];
 13 
 14 struct Edge
 15 {
 16     int v, nxt;
 17 }edges[maxm * 2];
 18 int ecnt;
 19 int head[maxn];
 20 
 21 bool vis[maxn];
 22 
 23 void AddEdge(int u, int v)
 24 {
 25     edges[ecnt].v = v;
 26     edges[ecnt].nxt = head[u];
 27     head[u] = ecnt++;
 28 }
 29 
 30 stack<int> S;
 31 int dfs_clock, scc_cnt;
 32 int low[maxn], pre[maxn], sccno[maxn], w[maxn];
 33 
 34 void dfs(int u, int fa)
 35 {
 36     low[u] = pre[u] = ++dfs_clock;
 37     S.push(u);
 38 
 39     for(int i = head[u]; ~i; i = edges[i].nxt)
 40     {
 41         if(i == (fa ^ 1)) continue;
 42         int v = edges[i].v;
 43         if(!pre[v])
 44         {
 45             dfs(v, i);
 46             low[u] = min(low[u], low[v]);
 47         }
 48         else if(!sccno[v]) low[u] = min(low[u], pre[v]);
 49     }
 50 
 51     if(pre[u] == low[u])
 52     {
 53         scc_cnt++;
 54         for(;;)
 55         {
 56             int x = S.top(); S.pop();
 57             sccno[x] = scc_cnt;
 58             w[scc_cnt] += a[x];
 59             if(x == u) break;
 60         }
 61     }
 62 }
 63 
 64 void find_scc()
 65 {
 66     scc_cnt = dfs_clock = 0;
 67     memset(w, 0, sizeof(w));
 68     memset(pre, 0, sizeof(pre));
 69     memset(sccno, 0, sizeof(sccno));
 70     for(int i = 0; i < n; i++) if(!pre[i]) dfs(i, -1);
 71 }
 72 
 73 vector<int> G[maxn];
 74 
 75 void dfs2(int u)
 76 {
 77     vis[u] = true;
 78     for(int i = 0; i < G[u].size(); i++)
 79     {
 80         int v = G[u][i];
 81         if(vis[v]) continue;
 82         dfs2(v);
 83         w[u] += w[v];
 84     }
 85 }
 86 
 87 int main()
 88 {
 89     while(scanf("%d%d", &n, &m) == 2 && n)
 90     {
 91         int sum = 0;
 92         for(int i = 0; i < n; i++) { scanf("%d", a + i); sum += a[i]; }
 93 
 94         memset(head, -1, sizeof(head));
 95         ecnt = 0;
 96 
 97         while(m--)
 98         {
 99             int u, v; scanf("%d%d", &u, &v);
100             AddEdge(u, v); AddEdge(v, u);
101         }
102 
103         find_scc();
104 
105         if(scc_cnt == 1) { puts("impossible"); continue; }
106 
107         for(int i = 1; i <= scc_cnt; i++) G[i].clear();
108         for(int u = 0; u < n; u++)
109             for(int i = head[u]; ~i; i = edges[i].nxt)
110             {
111                 int v = edges[i].v;
112                 if(sccno[u] != sccno[v]) G[sccno[u]].push_back(sccno[v]);
113             }
114 
115         memset(vis, false, sizeof(vis));
116         dfs2(1);
117 
118         int ans = 1000000000;
119         for(int i = 1; i <= scc_cnt; i++) ans = min(ans, abs(sum - w[i] * 2));
120         printf("%d\n", ans);
121     }
122 
123     return 0;
124 }
代码君

 

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4721540.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wxpython菜单栏嵌套窗口_如何在wxpython中使嵌套的Panel和Sizer工作

此处的逻辑是创建一个Panel,在其中添加控件,然后创建一个BoxSizer,在其中声明您在Panel中添加的每个控件在调整大小时的行为,并最终在Panel上设置应用BoxSizer的对象.您有2期.>首先,您缺少posPnlobject的上述语句的最后一部分.添加&#xff1a;posPnl.SetSizer(posPnlSzr)将…

Java多态与反射

多态通过分离做什么和怎么做&#xff0c;从另一个角度将接口与实现分离开来&#xff1b;通过多态来消除类型之间的耦合关系&#xff0c;在Java中&#xff0c;多态也叫动态绑定&#xff0c;后期绑定或运行时绑定&#xff0c;那么什么是方法绑定&#xff1f; 方法调用绑定&#x…

java webservice用户验证_使用java webservice的.net4.0 web app需要Usernametoken身份验证

我是使用.net 4.0 VS2010的新手。我需要使用java web服务并发送usernametoken自定义身份验证来访问服务&#xff0c;这是我很容易在VS2005中使用WSE2.0&#xff0c;那么在net 4.0中替换它是什么&#xff1f;我的客户端是.net 4.0 Asp.net Web应用程序(网站)&#xff0c;服务是j…

python随机数模块_python 随机数模块 -- random

一、概述这个模块实现的伪随机数生成器。对于整数&#xff0c;从区间选取。对于序列&#xff0c;随机元素。在实线的&#xff0c;有功能来计算均匀分布&#xff0c;正态分布(高斯) &#xff0c;对数正态分布&#xff0c;负指数&#xff0c;γ和β分布。对于生成的角度分布&…

织梦dedecms5.7二级域名文章图片不显示修改方法.相对路径改为绝对路径的方法...

dedecms升级到5.7SP1后&#xff0c;开启二级域名&#xff0c;你会发现&#xff0c;在二级域名下的文章&#xff0c;上传的图片地址都是&#xff1a;二级域名图片地址&#xff0c;这是相对路径。但是你的图片是默认上传在uploads里面的。应该使用绝对路径。这就出现图片路径错误…

java注册中心nacos_spring-cloud整合nacos做注册中心

前面讲了spring-cloud整合nacos做配置中心&#xff0c;这节讲一下nacos做注册中心至于注册中心是什么&#xff0c;我就不讲了&#xff0c;不了解的可以去问度娘下面我就直接开始了&#xff0c;也是比较简单的&#xff1a;1.引入依赖1.8Greenwich.SR12.1.0.RELEASEorg.springfra…

python批量转换图片格式_python批量将图片转换为JPEG格式

标签&#xff1a;# -*- coding:utf-8 -*-import osfrom PIL import Imagedef resize(path):filelist os.listdir(path)for i in filelist:img Image.open(path i)outfile os.path.splitext(i)[0] .jpegif img ! outfile:img.save("C:/Users/Administrator/Desktop/最…

判断 JS 中对象的类型

1.typeof 形如 var x "xx"; typeof x string typeof(x) 返回类型有&#xff1a;undefined “string” number boolean function object 缺点&#xff1a;对于object类型不能细分是什么类型 优点&#xff1a;对空null的判断 undefined的应用 2.instanceof 形如 var …

java中接口回调_Java中的接口回调实例

定义&#xff1a;/*** author Administrator* project&#xff1a; TestOne* package&#xff1a; PACKAGE_NAME* date&#xff1a; 2018/11/30 0030 15:42* brief: 郭宝**/public class Person {/*** 自定义一个接口**/public interface OnNameChangeListener{//接口中的抽象函…

python经纬度转换xy坐标公式_python 经纬度和平面坐标相互转换利用米勒坐标系

xy_coordinate [] # 转换后的XY坐标集def millerToXY (lon, lat):"""经纬度转换为平面坐标系中的x,y 利用米勒坐标系:param lon: 经度:param lat: 维度:return:"""L 6381372*math.pi*2W LH L/2mill 2.3x lon*math.pi/180y lat*math.pi/1…

Android基于mAppWidget实现手绘地图(二)--概要

离线地图是一张被切成类似瓷砖般格子图像组成&#xff0c;这些被切开的格子组织成多个缩放级别。缩放级别是从0开始。0这个缩放级别&#xff0c;地图图像的尺寸为1*1像素。在每下一个缩放级别&#xff0c;图像尺寸则会两倍递增。 每个地图都是有层和地图对象的。 层是一个抽象的…

java实体字节属性定义_Java字节码方法表与属性表详解

而这些字节其实对应的信息是它&#xff1a;所以问题就来了&#xff0c;aload_0不是助记符信息么&#xff0c;怎么就能够跟字节码文件中的字节对应上呢&#xff1f;所谓助记符其实也就是帮忙我们去记忆的符合&#xff0c;在底层其实也是对应的一个个十六进制的数字的&#xff0c…

允许使用抽象类类型 isearchboxinfo 的对象_此对象非彼对象(面向对象)3

java13面向对象深入3大纲这里没有写面向对象-封装性理解封装( encapsulation)怎么去理解&#xff0c;一台电脑利用一个外壳包裹&#xff0c;保护了里面的电器元件&#xff0c;提供了少量的按键与其对接使用。我要看电视&#xff0c;只需要按一下开关和换台就可以了。有必要了解…

python turtle库输出文字_python turtle库学习笔记

#绘制时钟#codingutf-8importturtle as ttfrom datetime import *#当前日期属于一周的第几天defWeek(t):week ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]returnweek[t.w…

后勤报修项目心得

耗时两天左右&#xff0c;完成了预期任务&#xff0c;来做个总结1.简单说下感受2.说说整个经历3.温习下自己在实战项目操作过程中出现的问题 1.因为之前有过一个礼拜左右时间上手预热项目&#xff0c;果然这样学就是上手快&#xff0c;比起在学校里的课&#xff0c;效率提升了很…

hbase java admin_java连接hbase(一):Admin功能接口表管理

本文hbase版本基于hbase-1.0.0-cdh5.6.1。Admin接口主要操作表创建&#xff0c;删除&#xff0c;列族的增删&#xff0c;表的清空&#xff0c;region的增删&#xff0c;合并操作。import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfigurat…

复制url直接能跳过验证_python 爬虫如何突破登录验证

我用 python 做爬虫爬过不少数据&#xff0c;比如在 google play 爬应用信息&#xff1b;在 instragram, 500px 爬图片&#xff1b;当然爬虫的作用不止于此&#xff0c;比如定时去某个网站签到&#xff0c;妈妈再也不用担心我忘记签到了这些网站支持游客访问&#xff0c;但要访…

[2-sat]HDOJ3062 Party

中文题 题意略 学2-sat啦啦啦 2-sat就是 矛盾的 ($x、x’$不能同时取) m对人 相互也有限制条件 取出其中n个人 也有可能是把一件东西分成 取/不取 相矛盾的两种情况 (那就要拆点啦~) 取其中n件 做法是 暴力 和 强连通 两种 重点在于建图&#xff1a; 对于x&#xff0c;记 取…

node作为java中间间_node作为中间服务层如何发送请求(发送请求的实现方法详解)...

GET请求&#xff1a;var http require(http);var qs require(querystring);var data {a: 123,time: new Date().getTime()};//这是需要提交的数据var content qs.stringify(data);var options {hostname: 127.0.0.1,port: 10086,path: /pay/pay_callback? content,metho…

python目标识别代码_利用ImageAI库只需几行python代码超简实现目标检测

什么是目标检测目标检测关注图像中特定的物体目标&#xff0c;需要同时解决解决定位(localization) 识别(Recognition)。相比分类&#xff0c;检测给出的是对图片前景和背景的理解&#xff0c;我们需要从背景中分离出感兴趣的目标&#xff0c;并确定这一目标的描述(类别和位置…