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

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

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std; const int maxn = + ;
const int maxm = + ; int n, m;
int a[maxn]; struct Edge
{
int v, nxt;
}edges[maxm * ];
int ecnt;
int head[maxn]; bool vis[maxn]; void AddEdge(int u, int v)
{
edges[ecnt].v = v;
edges[ecnt].nxt = head[u];
head[u] = ecnt++;
} stack<int> S;
int dfs_clock, scc_cnt;
int low[maxn], pre[maxn], sccno[maxn], w[maxn]; void dfs(int u, int fa)
{
low[u] = pre[u] = ++dfs_clock;
S.push(u); for(int i = head[u]; ~i; i = edges[i].nxt)
{
if(i == (fa ^ )) continue;
int v = edges[i].v;
if(!pre[v])
{
dfs(v, i);
low[u] = min(low[u], low[v]);
}
else if(!sccno[v]) low[u] = min(low[u], pre[v]);
} if(pre[u] == low[u])
{
scc_cnt++;
for(;;)
{
int x = S.top(); S.pop();
sccno[x] = scc_cnt;
w[scc_cnt] += a[x];
if(x == u) break;
}
}
} void find_scc()
{
scc_cnt = dfs_clock = ;
memset(w, , sizeof(w));
memset(pre, , sizeof(pre));
memset(sccno, , sizeof(sccno));
for(int i = ; i < n; i++) if(!pre[i]) dfs(i, -);
} vector<int> G[maxn]; void dfs2(int u)
{
vis[u] = true;
for(int i = ; i < G[u].size(); i++)
{
int v = G[u][i];
if(vis[v]) continue;
dfs2(v);
w[u] += w[v];
}
} int main()
{
while(scanf("%d%d", &n, &m) == && n)
{
int sum = ;
for(int i = ; i < n; i++) { scanf("%d", a + i); sum += a[i]; } memset(head, -, sizeof(head));
ecnt = ; while(m--)
{
int u, v; scanf("%d%d", &u, &v);
AddEdge(u, v); AddEdge(v, u);
} find_scc(); if(scc_cnt == ) { puts("impossible"); continue; } for(int i = ; i <= scc_cnt; i++) G[i].clear();
for(int u = ; u < n; u++)
for(int i = head[u]; ~i; i = edges[i].nxt)
{
int v = edges[i].v;
if(sccno[u] != sccno[v]) G[sccno[u]].push_back(sccno[v]);
} memset(vis, false, sizeof(vis));
dfs2(); int ans = ;
for(int i = ; i <= scc_cnt; i++) ans = min(ans, abs(sum - w[i] * ));
printf("%d\n", ans);
} return ;
}

代码君

HDU 2242 双连通分量 考研路茫茫——空调教室的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. c# 字符串的首字母大写转换 方法

    方法1: s.Substring(0,1).ToUpper()+s.Substring(1);  方法2: s = System.Threading.Thread.CurrentThread.Curr ...

  2. iOS 应用架构 (一)

    摘要:iOS 客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答 iOS 应用架构中的种种问题,本文是其中的第一篇,主要讲架构设计的通识和方法论等,同时还讨论了大家关心 ...

  3. 编写SQL语句操作数据库(慕课SQLite笔记)

    安卓常用数据存储方式之一SQLite学习及操作笔记 0.视频地址:http://www.imooc.com/video/3382 1.每个程序都有自己的数据库 默认情况下是各自互不干扰 1)创建一个数 ...

  4. Elasticsearch-基本操作1

    Elasticsearch版本:6.0 一.文档 一个文档不仅包含数据,也包含元数据,三个必须的元数据如下 _index:具有共同特性分到一起的文档集合,标示了文档的存放位置: 名字小写,不以下划线开 ...

  5. System.IO.Path 文件名、路径、扩展名 处理

    string filePath =@"E:/Randy0528/中文目录/JustTest.rar"; 更改路径字符串的扩展名.System.IO.Path.ChangeExten ...

  6. python——动态类型

    1.变量,对象,引用 变量是一个系统表的元素,拥有指向对象的连接的空间: 对象是分配的一块内存: 引用是自动形成的从变量到对象的指针: 类型属于对象,而不是变量 a=3;  变量a变成对象3的一个引用 ...

  7. Netweaver和CloudFoundry的服务器日志

    Netweaver 事务码SMICM,Goto->HTTP Plug-In->Server Logs: CloudFoundry 假设我部署本地应用到CloudFoundry之后,应用的状 ...

  8. 后台登录验证(Tokens/JSON Web Tokens(JWT) 的认证机制)

    sessionid不支持跨域,浏览器也不能禁止cookie(禁止以后sessionid还有什么用) 单点登录问题,即时SessionID一样,也无法跨域获取到数据 占坑

  9. 《毛毛虫组》【Alpha】Scrum meeting 3

    第二天 日期:2019/6/16 1.1 今日完成任务情况以及遇到的问题. 今日完成任务情况: 货物入库管理模块设计: (1)对数据库表--tb_InStore进行修改并完善: (2)学习SQL Se ...

  10. LINQ结合正则表达式查询文件系统

    string startFolder = @"D:\Program Files (x86)\Microsoft Visual Studio 12.0\"; IEnumerable& ...