http://acm.hdu.edu.cn/showproblem.php?pid=4635

问:最多加多少条边,使得原图不是强连通图

正向考虑有困难,不妨反向思考,既最少去掉几条边使得原图不是强连通。

总边数sum=n*(n-1)时肯定是强连通,已经给了m条边,sum-=m

这时把已经强连通的部分进行缩点,对于缩好的点我们把他们分成两部分,保证其中一部分到另一部分没有边(这两部分不强连通),再把sum减去两部分能构成所有的边数,取最大值即为答案

具体做时枚举每个小强连通块,找到num[i]*(n-num[i])最小的情况(num[i]为小强连通块点数),其中必须出度或入度为0的连通块才可以被选择

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <queue>
#include <map>
using namespace std ;
const int INF=0xfffffff ;
struct node
{
int s,t,nxt ;
}e[] ;
int n,m,idx,ans,tp,cnt,num[],IN[],OUT[],dfn[],vis[],low[],head[],st[],belong[] ;
void add(int s,int t)
{
e[cnt].s=s ;
e[cnt].t=t ;
e[cnt].nxt=head[s] ;
head[s]=cnt++ ;
}
void tarjan(int u)
{
dfn[u]=low[u]=++idx ;
vis[u]= ;
st[++tp]=u ;
int v ;
for(int i=head[u] ;i!=- ;i=e[i].nxt)
{
v=e[i].t ;
if(!dfn[v])
{
tarjan(v) ;
low[u]=min(low[u],low[v]) ;
}
else if(vis[v])
low[u]=min(low[u],dfn[v]) ;
}
if(dfn[u]==low[u])
{
ans++ ;
while()
{
v=st[tp--] ;
vis[v]= ;
belong[v]=ans ;
num[ans]++ ;
if(v==u)break ;
}
}
}
void sc()
{
memset(vis,,sizeof(vis)) ;
memset(dfn,,sizeof(dfn)) ;
memset(num,,sizeof(num)) ;
idx=tp=ans= ;
for(int i= ;i<=n ;i++)
if(!dfn[i])
tarjan(i) ;
}
int main()
{
int T ;
scanf("%d",&T) ;
for(int cas= ;cas<=T ;cas++)
{
cnt= ;
memset(head,-,sizeof(head)) ;
scanf("%d%d",&n,&m) ;
for(int i= ;i<m ;i++)
{
int s,t ;
scanf("%d%d",&s,&t) ;
add(s,t) ;
}
sc() ;
if(ans==)
{
printf("Case %d: -1\n",cas) ;
continue ;
}
memset(IN,,sizeof(IN)) ;
memset(OUT,,sizeof(OUT)) ;
for(int u= ;u<=n ;u++)
{
for(int i=head[u] ;i!=- ;i=e[i].nxt)
{
int tt=e[i].t ;
if(belong[tt]==belong[u])continue ;
IN[belong[tt]]++ ;
OUT[belong[u]]++ ;
}
}
int ret=- ;
for(int i= ;i<=ans ;i++)
{
if(!IN[i] || !OUT[i])
ret=max(ret,n*(n-)-m-num[i]*(n-num[i])) ;
}
printf("Case %d: %d\n",cas,ret) ;
}
return ;
}

HDU 4635的更多相关文章

  1. hdu 4635 Strongly connected 强连通缩点

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给你一个n个点m条边的图,问在图不是强连通图的情况下,最多可以向图中添多少条边,若图为原来 ...

  2. 爆零后的感受外加一道强联通分量HDU 4635的题解

    今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...

  3. HDU 4635 —— Strongly connected——————【 强连通、最多加多少边仍不强连通】

    Strongly connected Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  4. HDU 4635 (完全图 和 有向图缩点)

    题目链接:HDU  4635 题目大意: 给你一个有向图,加有向边,使得这个图是简单有向图.问你最多加多少条有向边. 简单有向图: 1.不存在有向重边. 2.不存在图循环.(注意是不存在 “图” 循环 ...

  5. hdu 4635 Strongly connected

    http://acm.hdu.edu.cn/showproblem.php?pid=4635 我们把缩点后的新图(实际编码中可以不建新图 只是为了概念上好理解)中的每一个点都赋一个值 表示是由多少个点 ...

  6. HDU 4635:Strongly connected(强连通)

    http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给出n个点和m条边,问最多能添加几条边使得图不是一个强连通图.如果一开始强连通就-1.思路:把图分成 ...

  7. hdu 4635 Strongly connected(强连通)

    考强连通缩点,算模板题吧,比赛的时候又想多了,大概是不自信吧,才开始认真搞图论,把题目想复杂了. 题意就是给你任意图,保证是simple directed graph,问最多加多少条边能使图仍然是si ...

  8. HDU 4635 Strongly connected (强连通分量)

    题意 给定一个N个点M条边的简单图,求最多能加几条边,使得这个图仍然不是一个强连通图. 思路 2013多校第四场1004题.和官方题解思路一样,就直接贴了~ 最终添加完边的图,肯定可以分成两个部X和Y ...

  9. hdu 4635 强连通度缩点

    思路:想用Tarjan算法进行缩点,并记录每个连通分支的点数.缩点完毕过后,找出所有出度或入度为0的连通分量,假设该连通分量的点数为num[i],那么 ans=Max(ans,(n-num-1)*(n ...

随机推荐

  1. (转) 密码学中的“盐值 Salt”

    为什么要在密码里加点“盐” 盐(Salt) 在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”. 以上这句话是维基百科上对于 ...

  2. PAT 1080 Graduate Admission[排序][难]

    1080 Graduate Admission(30 分) It is said that in 2011, there are about 100 graduate schools ready to ...

  3. Console 窗口

    Console窗口 记住,即是在GUI程序中你也可以拥有一个Console窗口.----这意味着你可以再GUI程序中使用printf.puts. Console窗口由系统的驱动设备程序负责,即是你的程 ...

  4. Git 系列——第一步安装 Git

    之前也没有用过什么版本控制的工具,唯一用过的就是 SVN 了,不过也只是简单的使用而已,比如写好代码就签入,没了?是的,没了. 于是接触到了 Git 这个分布式版本控制软件,接下来就让我们好好学习,天 ...

  5. 2016 CCPC 长春 Solution

    A - Hanzo vs. Genji 留坑. B - Fraction 水. #include <bits/stdc++.h> using namespace std; inline i ...

  6. 大数据,why python

    大数据,why python ps, 2015-12-4 20:47:46 python" title="大数据,why python">http://www.op ...

  7. sysctl.conf文件详解

    本文转自:http://www.cnblogs.com/Rosanna/p/3446557.html 使文件立刻生效命令:/sbin/sysctl -p /proc/sys目录下存放着大多数内核参数, ...

  8. C#——JSON操作类简单封装(DataContractJsonSerializer)

    Framework版本:.Net Framework 4 使用DataContractJsonSerializer时,实体请使用注解,格式如下 1.实体使用注解,并且提供get和set的public访 ...

  9. monit拉起服务

    check process hive_metastore matching "HiveMetaStore" start program = "/usr/bin/nohup ...

  10. elasticsearch的服务器响应异常及解决策略(转)

    详述: 1 _riverStatus Import_fail 问题描述: 发现有个索引的数据同步不完整,在 http://192.168.1.17:9200/_plugin/head/ 在browse ...