思路就是求边双连通分量,然后缩点,再用树形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. javascript 关于hashtable

    javascript 实现HashTable(哈希表) 一.javascript哈希表简介 javascript里面是没有哈希表的,一直在java,C#中有时候用到了这一种数据结构,javascrip ...

  2. 使用Karabiner为Mac内置键盘、HHKB进行映射

    使用Karabiner为Mac内置键盘.HHKB进行映射 Table of Contents 1. 引言 2. 什么是Karabiner和配置方法的基本说明 3. 内置键盘设置 4. HHKB设置 5 ...

  3. LaTeX小技巧——File ended while scanning use of \@writefile错误的

    早上在修改编译论文时发现了这个问题,仔细检查代码并没发现错误,一时也找不到具体的解决办法.我一直以为是因为runaway argument的错误提示,可实际上就是因为aux文件没有完整输入,导致上次编 ...

  4. linux下设置SSH无密码登录

    ssh配置 主机A:10.0.5.199 主机B:10.0.5.198 需要配置主机A无密码登录主机A,主机B 先确保所有主机的防火墙处于关闭状态. 在主机A上执行如下: 1. $cd ~/.ssh ...

  5. SequenceFile和MapFile

    HDFS和MR主要针对大数据文件来设计,在小文件处理上效率低.解决方法是选择一个容器,将这些小文件包装起来,将整个文件作为一条记录,可以获取更高效率的储存和处理,避免多次打开关闭流耗费计算资源.hdf ...

  6. 【UML】用例图Use Case diagram(转)

    http://blog.csdn.net/sds15732622190/article/details/48858219 前言 总结完UML概述,就该说道UML中的九种图了,这九种图中,最先要说的,就 ...

  7. NBear简介与使用图解

    NBear简介与使用图解 框架类型:ORM映射框架 简介:NBear是一个基于.Net 2.0.C#2.0开放全部源代码的的软件开发框架类库.NBear的设计目标是尽最大努力减少开发人员的工作量,最大 ...

  8. Dapper学习总结

    看了<Dapper从入门到精通>后的总结 (1)Dapper 是直接扩展 IDBConnection,而且是单独一个文件,可以直接嵌入到项目中使用. (2)通过手写sql语句,调用exec ...

  9. Python Web 架构

    1. Django(全能型)2. Tornado3. BottlePython+Bottle+Sina SAE快速构建网站http://www.cnblogs.com/Xjng/p/3511983.h ...

  10. OC中的宏定义

    我们都知道,宏定义是编译期常量.而OC是一种动态语言. 1.iOS系统版本判断的两个宏定义 __IPHONE_OS_VERSION_MAX_ALLOWED // iOS系统版本最大允许 __IPHON ...