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,一经查实,立即删除!

相关文章

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

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

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;只需要按一下开关和换台就可以了。有必要了解…

复制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;记 取…

Winodws live writer

发布一篇试试。 转载于:https://www.cnblogs.com/DotNetCSharp/p/4742956.html

java里面value_「Java基础知识」Java中包含哪些运算符

原标题&#xff1a;「Java基础知识」Java中包含哪些运算符在Java中包含的运算符有&#xff1a;算数运算符&#xff0c;逻辑运算符&#xff0c;关系运算符等。算数运算符也就是我们平时的加减乘除余等操作&#xff1a;在Java中都是将右边的值赋值给左边&#xff0c;所以一般格式…

idea maven创建java项目_新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目(图文教程)...

之前都没试过用maven来管理过项目&#xff0c;但是手动找包导包确实不方便&#xff0c;于是今天用2016版的IDEA进行了maven的初尝试。打开IDEA&#xff0c;创建新项目&#xff1a;然后选择Maven&#xff0c;以及选择自己电脑的jdk&#xff1a;接下来自定义GroupId以及ArtifactI…

servlet 返回可访问文件_JavaWeb技术(4):Servlet的理解(上)

我们在开发中无时无刻都在与Servlet进行接触&#xff0c;只是因为框架的封装性&#xff0c;我们很少直接地去操作servlet&#xff0c;但再怎么封装&#xff0c;基本的思路都不会变化&#xff0c;变得只是实现的方式&#xff0c;Servlet是什么&#xff1a;网上的回答基本是Servl…

如何设置打印的时候不加上页面链接_excel表格的这10个打印小技巧,办公室财务人员记得收藏...

打印工作表是日常工作中最常见的一个工作&#xff0c;也是Excel在工作中最常用的一个地方&#xff0c;如何做到快速准确地打印文件呢。今天文理会计小编给大家从网上整理了几个打印文件的小技巧。1、打印标题打印的工作表的数据有好多页的时候&#xff0c;为了查看方便&#xf…

rabbitmq 拉取消息太慢_面试官:消息队列这些我都要问

作者&#xff1a;mousycodersegmentfault.com/a/1190000021054802消息队列连环炮项目里怎么样使用 MQ 的&#xff1f;为什么要使用消息队列&#xff1f;消息队列有什么优点和缺点&#xff1f;kafka,activemq,rabbitmq,rocketmq 都有什么去呗&#xff1f;如何保证消息队列高可用…

python 定义变量_第三章(第2节):变量和常量

变量的概念基本上和初中代数的方程变量是一致的&#xff0c;只是在计算机程序中&#xff0c;变量不仅可以是数字&#xff0c;还可以是任意数据类型&#xff0c;比如我们上节课刚刚学过的基本数据类型或者我们后面要学的自定义数据类型。所谓常量就是不能改变的变量&#xff0c;…

pytorch卷积神经网络_资源|卷积神经网络迁移学习pytorch实战推荐

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达一、资源简介这次给大家推荐一篇关于卷积神经网络迁移学习的实战资料&#xff0c;卷积神经网络迁移学习简单的讲就是将一个在数据集上训练好的卷积神经网络模型通过简单的调整快速移…

php 删除服务器上的文件,php如何删除服务器文件

在php中可以使用“ftp_delete”函数删除服务器文件&#xff0c;其语法是“ftp_delete(ftp_connection,file)”&#xff0c;参数“ftp_connection”表示要使用的FTP连接&#xff0c;参数“file”表示要删除的文件的路径。推荐&#xff1a;《PHP视频教程》PHP ftp_delete() 函数定…

java class load 类加载

1:what is it jvm把描述类的数据从class字节码文件加载到内存&#xff0c;并对数据进行校验、解析、初始化&#xff0c;最终成为jvm直接使用的数据类型 1、ClassNotFoundExcetpion   我们在开发中&#xff0c;经常可以遇见java.lang.ClassNotFoundExcetpion这个异常&#xf…

debian执行php网页,如何在Debian上安装和使用PHP Composer

php composer是一个包管理工具&#xff0c;它消除了手动维护应用程序的PHP包的麻烦&#xff0c;可以使用composer轻松安装所有必需的包。本篇文章将介绍在Debian系统上安装和配置PHP Composer的方法。1、条件shell使用sudo权限访问正在运行的debian系统。必须安装和配置5.3或更…

JAVA_if或者怎么用,Java If语句

Java教程 - Java If语句Java if语句用于根据条件执行一个代码块。Java If语句下面是Java if语句的最简单形式:if(condition)statement;condition是一个布尔表达式。如果condition是true那么执行语句。如果condition是false&#xff0c;那么绕过语句。以下代码根据an的值输出消息…

iOS开发——高级技术本地化与国际化详解

本地化与国际化详解效果如下&#xff1a;英语&#xff1a; 中文&#xff1a; 具体实现如下&#xff1a;一。先做准备&#xff1a;设置程序本地化在xcode点击程序图标…

Matlab经纬度坐标转换xy坐标,经纬度坐标系转换为UTM坐标系(matlab)

如题所说&#xff0c;直接上程序。验证自己做一下&#xff0c;结果应该是对的。诚不我欺。(注意&#xff1a;程序名与函数名保持一致&#xff01;&#xff01;&#xff01;)function[shuchu]lat_lon2utm(lat_shuru,lon_shuru)%地理经纬度坐标转换为UTM坐标size_shuzusize(lat_s…