思路就是求边双连通分量,然后缩点,再用树形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. 手动添加日期到mysql数据库

    //获得jsp页面上的数据 String dates=request.getParameter("dates"); //使用预定格式将日期转换为字符串 SimpleDateForm ...

  2. css3相关样式

    1.渐变 1.1 线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向 background: linear-gradient(direction, color-stop1 ...

  3. html5 03

    HTML03 一. 表单标签 <form></form> 常用属性 Action 跳转到什么页面 Method  以什么模式提交 Get Url有长度限制 IE6.0 url ...

  4. Vmware Player 比较

    .wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertica ...

  5. 设置Cookie最大存活时间

    Cookie和Session都是由Tomcat自动创建的对象,Cookie的默认最大存活时间是 -1 ,即当浏览器关闭时Cookie就消失了:Session的默认最大存活时间是30分钟. 使用Sess ...

  6. android studio项目提交Git@OSC

    转载地址:http://www.bubuko.com/infodetail-977061.html 先到git.oscchina.net网站上申请个账号,然后创建一个项目.过程不再说了. 新建工程后, ...

  7. jsoup获取网页属性

    package com.open1111.jsoup; import org.apache.http.HttpEntity;import org.apache.http.client.methods. ...

  8. Codeforces Round #321 (Div. 2) E Kefa and Watch (线段树维护Hash)

    E. Kefa and Watch time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. helm install

    reference 前提:已安装k8s:v1.10.4 helm install on master(无需下载官方tar包) 链接:https://pan.baidu.com/s/1Ji3Ru1pTQ ...

  10. Spring3中好用的工具类收集

    1) 请求工具类 org.springframework.web.bind.ServletRequestUtils //取请求参数的整数值: public static Integer getIntP ...