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. cocos进阶教程(5)各种动画使用心得

    Node类 不解释 ActionTimeline类是一个3.0时代的动画类, 案例一 //建立node方案一Data data = FileUtils::getInstance()->getDa ...

  2. R语言统计词频 画词云

    原始数据: 程序: #统计词频 library(wordcloud) # F:/master2017/ch4/weibo170.cut.txt text <- readLines("F ...

  3. 883. Projection Area of 3D Shapes

    问题 NxN个格子中,用1x1x1的立方体堆叠,grid[i][j]表示坐标格上堆叠的立方体个数,求三视图面积. Input: [[1,2],[3,4]] Output: 17 Explanation ...

  4. Databases Questions & Answers

    Databases Questions & Answers 1.      What are two methods of retrieving SQL? 2.      What curso ...

  5. Element-UI中Upload上传文件前端缓存处理

    Element-UI对于文件上传组件的功能点着重于文件传递到后台处理,所以要求action为必填属性.但是如果需要读取本地文件并在前端直接处理,文件就没有必要传递到后台,比如在本地打开一个JSON文件 ...

  6. python_发送短信脚本

    sendsms.py #!/usr/bin/env python # coding: utf-8 import sys import urllib import urllib2 "" ...

  7. How to install tensorflow from source on ubuntu 18.04 64bit

    1,install dependencies sudo apt-get install openjdk-8-jdk git python-dev python3-dev python-numpy py ...

  8. Bitmap 位图

    转自: http://dongxicheng.org/structure/bitmap/ 1.  概述 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用.本文介绍了位图的实现 ...

  9. Same Tree,判断两个二叉树是不是相同的树,结构相同,每个节点的值相同

    算法分析:这道题很简单,利用递归即可. public class SameTree { public boolean isSameTree(TreeNode p, TreeNode q) { if(p ...

  10. python 输出环境变量

    import os # Access all environment variables print('*---------------ENVIRON-------------------*') pr ...