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

考研路茫茫——空调教室

Time Limit: 2000ms
Memory Limit: 32768KB
This problem will be judged on HDU. Original ID: 2242
64-bit integer IO format: %I64d      Java class name: Main
众所周知,HDU的考研教室是没有空调的,于是就苦了不少不去图书馆的考研仔们。Lele也是其中一个。而某教室旁边又摆着两个未装上的空调,更是引起人们无限YY。

一个炎热的下午,Lele照例在教室睡觉的时候,竟然做起了空调教室的美梦。

Lele梦到学校某天终于大发慈悲给某个教室安上了一个空调。而且建造了了M条通气管道,让整个教学楼的全部教室都直接或间接和空调教室连通上,构成了教室群,于是,全部教室都能吹到空调了。

不仅仅这样,学校发现教室人数越来越多,单单一个空调已经不能满足大家的需求。于是,学校决定封闭掉一条通气管道,把全部教室分成两个连通的教室群,再在那个没有空调的教室群里添置一个空调。

当然,为了让效果更好,学校想让这两个教室群里的学生人数尽量平衡。于是学校找到了你,问你封闭哪条通气管道,使得两个教室群的人数尽量平衡,并且输出人数差值的绝对值。

Input

本题目包含多组数据,请处理到文件结束。
每组测试第一行包含两个整数N和M(0<N<=10000,0<M<20000)。其中N表示教室的数目(教室编号从0到N-1),M表示通气管道的数目。
第二行有N个整数Vi(0<=Vi<=1000),分别代表每个教室的人数。
接下来有M行,每行两个整数Ai,Bi(0<=Ai,Bi<N),表示教室Ai和教室Bi之间建了一个通气管道。

Output

对于每组数据,请在一行里面输出所求的差值。
如果不管封闭哪条管道都不能把教室分成两个教室群,就输出"impossible"。

Sample Input

4 3
1 1 1 1
0 1
1 2
2 3
4 3
1 2 3 5
0 1
1 2
2 3

Sample Output

0
1

解题:边双连通分量

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const int maxn = 10010;
 5 const int INF = 0x3f3f3f3f;
 6 struct arc {
 7     int to,next;
 8     arc(int x = 0,int y = -1) {
 9         to = x;
10         next = y;
11     }
12 } e[200000];
13 int hd[maxn],hd2[maxn],low[maxn],dfn[maxn],belong[maxn],tot,clk,bcc;
14 void add(int *head,int u,int v) {
15     e[tot] = arc(v,head[u]);
16     head[u] = tot++;
17 }
18 stack<int>stk;
19 int sz[maxn],p[maxn],n,m;
20 void tarjan(int u,int fa) {
21     dfn[u] = low[u] = ++clk;
22     stk.push(u);
23     bool flag = false;
24     for(int i = hd[u]; ~i; i = e[i].next) {
25         if(!flag && e[i].to == fa) {
26             flag = true;
27             continue;
28         }
29         if(!dfn[e[i].to]) {
30             tarjan(e[i].to,u);
31             low[u] = min(low[u],low[e[i].to]);
32         } else low[u] = min(low[u],dfn[e[i].to]);
33     }
34     if(low[u] == dfn[u]) {
35         int v;
36         bcc++;
37         do {
38             v = stk.top();
39             stk.pop();
40             belong[v] = bcc;
41             sz[bcc] += p[v];
42         } while(v != u);
43     }
44 }
45 void init() {
46     for(int i = tot = bcc = clk = 0; i < maxn; ++i) {
47         hd[i] = hd2[i] = -1;
48         sz[i] = dfn[i] = belong[i] = 0;
49     }
50     while(!stk.empty()) stk.pop();
51 }
52 void dfs(int u,int fa) {
53     for(int i = hd2[u]; ~i; i = e[i].next) {
54         if(e[i].to == fa) continue;
55         dfs(e[i].to,u);
56         sz[u] += sz[e[i].to];
57     }
58 }
59 int main() {
60     int sum,u,v;
61     while(~scanf("%d%d",&n,&m)) {
62         for(int i = sum = 0; i < n; ++i) {
63             scanf("%d",p + i);
64             sum += p[i];
65         }
66         init();
67         for(int i = 0; i < m; ++i) {
68             scanf("%d%d",&u,&v);
69             add(hd,u,v);
70             add(hd,v,u);
71         }
72         for(int i = 0; i < n; ++i)
73             if(!dfn[i]) tarjan(i,-1);
74         if(bcc == 1) {
75             puts("impossible");
76             continue;
77         }
78         for(int i = 0; i < n; ++i)
79             for(int j = hd[i]; ~j; j = e[j].next) {
80                 if(belong[i] == belong[e[j].to]) continue;
81                 add(hd2,belong[i],belong[e[j].to]);
82             }
83         dfs(1,-1);
84         int ret = INF;
85         for(int i = 1; i <= bcc; ++i)
86             for(int j = hd2[i]; ~j; j = e[j].next)
87                 ret = min(ret,abs(sum - sz[i] - sz[i]));
88         printf("%d\n",ret);
89     }
90     return 0;
91 }
View Code

 

转载于:https://www.cnblogs.com/crackpotisback/p/4752932.html

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

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

相关文章

如何查看现有项目的struts和hibernate和spring版本

1. struts的版本信息 查看 struts.jar\META-INF\MANIFEST.MF再查看 Implementation-Version看后面的数字.. Manifest-Version: 1.0Specification-Title: Struts FrameworkClass-Path: commons-beanutils.jar commons-collections.jar commons-dig ester.jar commons-fileuploa…

java 正则表达式 组合_java基础:5.1 面向对象、类的关联 聚合 组合、正则表达式...

上一个礼拜太忙了&#xff0c;今天开始恢复java的学习~目录1、面向过程——面向对象的区别传统的面向过程式编程是动作驱动的&#xff0c;数据和动作是分离的。面向对象编程的范式重点在于对象&#xff0c;动作和数据一起定义在对象中。面向过程的范式重点在于设计方法。面向对…

html5学习之路_003

html布局 使用<div>元素布局使用<table>元素布局<div>元素布局 <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>div布局</title><link rel"stylesheet" type&qu…

计算机二级 java和web_2020年全国计算机二级WEB程序复习知识点:JavaBean

【摘要】即将参加全国计算机等级考试的考生们&#xff0c;考试即将到来&#xff0c;大家的备考工作进行得如何了&#xff1f;考必过为大家精心整理了2020年全国计算机二级WEB程序复习知识点&#xff1a;JavaBean&#xff0c;希望能够助力全国计算机等级考试&#xff0c;相信坚持…

java表达式语句_Java基础知识笔记第三章:运算符表达式语句

算术运算符与表达式操作符描述例子加法 - 相加运算符两侧的值A B 等于 30-减法 - 左操作数减去右操作数A – B 等于 -10*乘法 - 相乘操作符两侧的值A * B等于200/除法 - 左操作数除以右操作数B / A等于2&#xff05;取余 - 左操作数除以右操作数的余数B%A等于0自增: 操作数的值…

JavaScript_Util_01

//记住细节往往能让自己更有效率。定义变量&#xff0c;打冒号//XML文档空格bug补救方案function cleanWhiteSpace(element){elementelement||document;var cur element.firstChild;while(cur ! null){ //如果是文本节点&#xff0c;并且只包含空格if(cur.nodeType 3 &&a…

java简单创建图片面板_图像界面编程简单窗体创建

/** 图像界面编程* JFrame 窗体* JPanel 面板* JLabel 标签* JButton 按钮* JLabel 标签* ImageIcon 图标*** */package fish;import java.util.*;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax…

变量不合法的表达式JAVA_Java8中lambda表达式的语法,别人都会的,你还不会吗?「一」...

函数式编程函数式编程是一种编程方式&#xff0c;它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus)&#xff0c;λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。 函数式编程是"结构化编程"的一种&#xff0c;主要思想是把运…

【原创】请不要对Boost Format使用Byte作为参数

曾几何时我们可以肆无忌惮的对sprintf传入BYTE等类型作为参数&#xff0c;只要你指定的为%D即可打印出对应的数字但是boost format不可以&#xff0c;当你发生类型截断&#xff0c;错误&#xff0c;异常&#xff0c;请尽快查看你传入的类型是否为Byte因为format会将GoByte当做c…

java中catch ()_有关java中的try{}catch(){}的讲解

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/qq_38225558/article/details/82054100try {可能出现异常的代码(包括不会出现异常的代码)} catch (Ex…

PAT (Advanced Level) Practise:1001. A+B Format

【题目链接】 Calculate a b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits). Input Each input file contains one test case. Each case contains a pair of i…

stderr java_如何使用Log4j将stdout和stderr写入/捕获到文件并使用Windows和Tomcat 5.5(Java)?...

我正在使用Windows 2008 R2和Apache Tomcat 5.5,以获取您的信息.STDOUT和STDERR可以通过Apache Tomcat属性自动记录,通过Logging选项卡 – >重定向Stdout和重定向Stderror文本框.但我想通过log4j来控制它.我正在尝试利用ConsoleAppender和TimeAndSizeRollingAppender class来…

动手制作属于你自己的WIN PE3.0

最近想要更新公司的网Ghost系统&#xff0c;所以小研究一下win pe &#xff0c;在网上看见一个很不错的教程&#xff0c;在这里分享给大家&#xff01;并非原创&#xff0c;纯属转载&#xff01;&#xff01;O(∩_∩)O~天缘的作品&#xff0c;很是佩服这个哥们啊.....一、WINPE…

java 命令行读取_Java:从控制台(console,命令行)读取字符 | 学步园

/*** 从控制台(console,命令行)读取字符&#xff1a;InputStreamReader(System.in)*/import java.io.IOException;import java.io.InputStreamReader;public class Test{public static void main(String[] args) throws IOException{StringBuffer sql null;sql sqlReaderFrom…

vector初始化

对vector对象来说&#xff0c;直接初始化的方式适用于3种情况&#xff1a;1.初始值已知且数量少&#xff1b;2.初始值是另一个vector对象的副本&#xff1b;3.所有元素的初始值都一样。此外还有一种更常见的情况是4.创建一个vector对象时并不清楚实际所需元素的个数&#xff0c…

python图像处理模糊_Python+OpenCV图像处理之模糊操作

模糊操作是图像处理中最简单和常用的操作之一&#xff0c;该使用的操作之一原因就为了给图像预处理时减低噪声&#xff0c;基于数学的卷积操作均值模糊&#xff0c;函数 cv2.blur(image,(5,5))&#xff0c;这是一个平滑图片的函数&#xff0c;它将一个区域内所有点的灰度值的平…

javascript Date类型 学习笔记

1 创建一个新的日期对象&#xff0c;如果不带参数&#xff0c;则对象自动获得当前的日期和时间 var d new Date() 2 如果需要指定特定的日期&#xff0c;则可以通过Date.parse() 或者 Date().UTC(),返回时间戳作为 new Date()的参数 Date.parse() 用法&#xff1a; var time…

python如何访问私有变量_python – 从类访问私有模块变量

我正在尝试理解python范围规则.为此,我尝试从同一模块中的类访问“非常私有”变量bar "bar"_bar "underscore"__bar "double underscore"def foo():print barprint _barprint globals()["__bar"]print __barclass Foo:def __init__…

高斯消元学习

1. 证明XOR满足交换律&#xff0c;结合律&#xff0c;是自身的逆运算。比如说&#xff0c;1^0 1 1^1 0 0^1 1 0^0 01^1^0 0 1^0^1 0.a^b^ab 即一个数异或两次相当于无效 2. 从N个数中选出两个数&#xff0c;使XOR和最大。解法&#xff1a;我们知道两个数字之间的异或…

java经纬度格式_java经纬度格式转换

在数学中&#xff0c;表示角度的度、分、秒分别使用、′、″符号进行表示。160′&#xff0c;1′60″ &#xff0c;13600″。由上述可知度分秒转换度的计算公式为&#xff1a;(ddmm′ss″) ddmm/60ss/3600如&#xff1a;11330′10.25″ 11330/6010.25/3600 ≈113.502847度分秒…