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 ;
}

最新文章

  1. [Hadoop in Action] 第2章 初识Hadoop
  2. webpack处理Img标签路径的几种情况
  3. Python Queue实现生产与消费
  4. Linux重置系统root密码
  5. HTML第五天学习笔记
  6. 如何在jQuery中使用 setInterval,setTimeout
  7. notify()、notifyAll()和wait()
  8. 003Java语言环境搭建
  9. Basic Linux Privilege Escalation
  10. qt之图像处理
  11. Q&amp;A in Power BI service and Power BI Desktop
  12. flask wigs 服务器
  13. nodejs的koa2框架
  14. KNN手写实践:Python基于数据集整体计算以及排序
  15. Linux每日小技巧---统计服务器IP连接数
  16. 导入Maven项目后,Eclipse提示“Missing artifact ”类的错误
  17. Java EE业务处理流程与XML的引入
  18. Python中使用UUID
  19. Docker安装及常用操作
  20. CSS学习笔记(3)--表格边框

热门文章

  1. #C++初学记录(高精度运算)(加法)
  2. 牛客国庆集训派对Day3 Solution
  3. WebStorm下使用TypeScript
  4. 【读书笔记】Junit实战
  5. php 用户向微信发送信息
  6. 20145329 《网络对抗技术》MS08_067远程漏洞攻击
  7. TypeScript 照猫画虎
  8. linux下如何kill tty终端
  9. UVA 11019 Matrix Matcher(二维hash + 尺取)题解
  10. 框架-springmvc源码分析(一)