hdu 4635 强连通度缩点
思路:想用Tarjan算法进行缩点,并记录每个连通分支的点数。缩点完毕过后,找出所有出度或入度为0的连通分量,假设该连通分量的点数为num[i],那么
ans=Max(ans,(n-num-1)*(n-num)+(num-1)*num+(n-num)*num-m);
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define Maxn 100010
#define Max(a,b) (a)>(b)?(a):(b)
using namespace std;
int head[Maxn],vi[Maxn],dfn[Maxn],low[Maxn],e,lab,top,Stack[Maxn],flag,id[Maxn],in[Maxn],out[Maxn],n,m,Ei[Maxn],num;
__int64 ans;
struct Edge{
int u,v,next;
}edge[Maxn];
void init()
{
memset(head,-,sizeof(head));
memset(vi,,sizeof(vi));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(in,,sizeof(in));
memset(out,,sizeof(out));
memset(Ei,,sizeof(Ei));
e=lab=top=flag=num=;
ans=;
}
void add(int u,int v)
{
edge[e].u=u,edge[e].v=v,edge[e].next=head[u],head[u]=e++;
}
void Tarjan(int u)
{
dfn[u]=low[u]=++lab;
vi[u]=;
Stack[top++]=u;
int i,j,v;
for(i=head[u];i!=-;i=edge[i].next)
{
v=edge[i].v;
if(!dfn[v])
{
Tarjan(v);
low[u]=min(low[u],low[v]);
}
if(vi[v])
low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
++num;
int cnt=;
do{
i=Stack[--top];
vi[i]=;
id[i]=num;
cnt++;
}while(i!=u);
Ei[num]=cnt;
if(n==cnt)
{
flag=;
return ;
}
}
}
int solve()
{
int i,j;
for(i=;i<=n;i++)
{
if(!dfn[i])
Tarjan(i);
if(flag)
return ;
}
return ;
}
int main()
{
int i,j,a,b,t,Case=;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d%d",&n,&m);
for(i=;i<=m;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
}
if(!solve()||flag)
{
printf("Case %d: -1\n",++Case);
continue;
}
for(i=;i<=n;i++)
for(j=head[i];j!=-;j=edge[j].next)
{
int u=edge[j].u;
int v=edge[j].v;
if(id[u]!=id[v])
{
in[id[v]]++;
out[id[u]]++;
}
}
__int64 temp;
for(i=;i<=num;i++)
if(in[i]==||out[i]==)
{
temp=(__int64)((n-Ei[i])*(n-Ei[i]-)+Ei[i]*(Ei[i]-)+(n-Ei[i])*Ei[i]-m);
ans=Max(ans,temp);
}
printf("Case %d: %I64d\n",++Case,ans);
}
return ;
}
hdu 4635 强连通度缩点的更多相关文章
- Intelligence System (hdu 3072 强联通缩点+贪心)
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Proving Equivalences (hdu 2767 强联通缩点)
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- hdu 4635 Strongly connected 强连通缩点
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给你一个n个点m条边的图,问在图不是强连通图的情况下,最多可以向图中添多少条边,若图为原来 ...
- HDU 4635 (完全图 和 有向图缩点)
题目链接:HDU 4635 题目大意: 给你一个有向图,加有向边,使得这个图是简单有向图.问你最多加多少条有向边. 简单有向图: 1.不存在有向重边. 2.不存在图循环.(注意是不存在 “图” 循环 ...
- 爆零后的感受外加一道强联通分量HDU 4635的题解
今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...
- hdu 4635 Strongly connected
http://acm.hdu.edu.cn/showproblem.php?pid=4635 我们把缩点后的新图(实际编码中可以不建新图 只是为了概念上好理解)中的每一个点都赋一个值 表示是由多少个点 ...
- HDU 4635 —— Strongly connected——————【 强连通、最多加多少边仍不强连通】
Strongly connected Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- HDU 3836 Equivalent SetsTarjan+缩点)
Problem Description To prove two sets A and B are equivalent, we can first prove A is a subset of B, ...
- HDU 2767-Proving Equivalences(强联通+缩点)
题目地址:pid=2767">HDU 2767 题意:给一张有向图.求最少加几条边使这个图强连通. 思路:先求这张图的强连通分量.假设为1.则输出0(证明该图不须要加边已经是强连通的了 ...
随机推荐
- js特效-仿照html属性title写一个弹出标题样式
问题场景:商品描述,当营业员给客户介绍时会看着这些弹出标题来给客户讲解描述,一般采用html中属性title来实现,但是有些商品描述太长,这些title在IE浏览器中大约展示5s,营业员需要多次移动鼠 ...
- UVaLive 7375 Hilbert Sort (递归,四分图,模拟)
题意:告诉你一条希尔伯特曲线的大小,然后给你n 个人,及n 个人的坐标,你的起点是左下角,终点是右下角,按照希尔伯特的曲线去走,按照这个顺序给n个人排序, 按顺序输出每个人的名字! 析:这就是一个四分 ...
- Spring MVC Framework 实例
一 SpringMVC基础入门,创建一个HelloWorld程序 1 首先,导入SpringMVC需要的jar包. commons-logging-<version>.jar spring ...
- ArrayList常用方法
ArrayList常用方法 import java.util.*; public class JIHe04 { // ArrayList add 添加方法 public static void fun ...
- Python3学习
要做一个儿童搜索引擎的项目(www.kidsearch.cn),所以开始接触各种新的语言,初步学了PHP爬虫,觉得要做大点的项目用PHP确实不太方便,中文兼容性就是一个比较棘手的问题.python的爬 ...
- MEF 编程指南(十):重组
有些应用程序被设计成在运行时动态地改变.例如,一个新的扩展可能被下载,或者其他原因变得不可用.MEF 依靠我们称之为重组(Composition)的技术处理,在初始化组合以后改变导入值的场景. 导 ...
- UVa Online Judge 工具網站
UVa Online Judge 工具網站 UVa中译题uHuntAlgorithmist Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 Mirror UVa Online Judg ...
- 【转】WPF颜色相关操作
using System.Windows.Media; 1.String转换成Color Color color = (Color)ColorConverter.ConvertFromStri ...
- C++访问权限
1.C++类本身没有访问权限的概念,就是class Base. 2.类成员的访问权限有:public.protected.private 3.类的继承方式有:public.protected.priv ...
- 通过程序 VB.Net 或 C# 读取文本文件行数
1, VB.NET 读取 (通过streamReader) ' tmpCount = 0 'Dim tmpSR As New StreamReader(fileFullName, System.Tex ...