G - Strongly connected - hdu 4635(求连通分量)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; const int MAXN = 1e5+;
const int oo = 1e9; struct Edge{int v, next;}e[MAXN];
int Head[MAXN], cnt;
void AddEdge(int u, int v)
{
e[cnt].v = v;
e[cnt].next = Head[u];
Head[u] = cnt++;
} int dfn[MAXN], low[MAXN], Index;
int Stack[MAXN], top, inStack[MAXN];
int blg[MAXN], bnt, nblg[MAXN];///属于哪个连通分量,连通分量里面有几个点
int outEdge[MAXN], inEdge[MAXN]; void InIt(int N)
{
cnt = Index = top = bnt = ;
for(int i=; i<=N; i++)
{
Head[i] = -;
dfn[i] = ;
nblg[i] = ;
outEdge[i] = ;
inEdge[i] = ;
}
}
void Tarjan(int u)
{
int v; low[u] = dfn[u] = ++Index;
Stack[++top] = u;
inStack[u] = true; for(int j=Head[u]; j!=-; j=e[j].next)
{
v = e[j].v;
if( !dfn[v] )
{
Tarjan(v);
low[u] = min(low[u], low[v]);
}
else if(inStack[v] == true)
low[u] = min(low[u], dfn[v]);
} if(low[u] == dfn[u])
{
++bnt;
do
{
v = Stack[top--];
inStack[v] = false;
blg[v] = bnt;
nblg[bnt]++;
}
while(u != v);
}
} int main()
{
int T, t=; scanf("%d", &T); while(T--)
{
int i, j, u, v, N, M; scanf("%d%d", &N, &M); InIt(N); for(i=; i<M; i++)
{
scanf("%d%d", &u, &v);
AddEdge(u, v);
} for(i=; i<=N; i++)
{
if( !dfn[i] )
Tarjan(i);
} for(i=; i<=N; i++)
for(j=Head[i]; j!=-; j=e[j].next)
{
v = e[j].v;
if(blg[i] != blg[v])
{
inEdge[ blg[v] ]++;
outEdge[ blg[i] ]++;
}
} int x, y=oo; for(i=; i<=bnt; i++)
{
if(!outEdge[i] || !inEdge[i])
y = min(y, nblg[i]);
} x = N-y; if(bnt == )
printf("Case %d: -1\n", t++);
else
printf("Case %d: %lld\n",t++, (long long)x*(x-)+x*y+y*(y-)-M);
} return ; }
G - Strongly connected - hdu 4635(求连通分量)的更多相关文章
- 强连通图(最多加入几条边使得图仍为非强连通图)G - Strongly connected HDU - 4635
题目链接:https://cn.vjudge.net/contest/67418#problem/G 具体思路:首先用tarjan缩点,这个时候就会有很多个缩点,然后再选取一个含有点数最少,并且当前这 ...
- Strongly connected HDU - 4635(判断强连通图 缩点)
找出强联通块,计算每个连通块内的点数.将点数最少的那个连通块单独拿出来,其余的连通块合并成一个连通分量. 那么假设第一个连通块的 点数是 x 第二个连通块的点数是 y 一个强连通图(每两个点之间,至 ...
- kuangbin专题 专题九 连通图 Strongly connected HDU - 4635
题目链接:https://vjudge.net/problem/HDU-4635 题目:有向图,给定若干个连通图,求最多还能添加几条边,添完边后,图仍然要满足 (1)是简单图,即没有重边或者自环 (2 ...
- Strongly connected HDU - 4635 原图中在保证它不是强连通图最多添加几条边
1 //题意: 2 //给你一个有向图,如果这个图是一个强连通图那就直接输出-1 3 //否则,你就要找出来你最多能添加多少条边,在保证添加边之后的图依然不是一个强连通图的前提下 4 //然后输出你最 ...
- hdu 1213 求连通分量(并查集模板题)
求连通分量 Sample Input2 //T5 3 //n m1 2// u v2 34 5 5 12 5 Sample Output24 # include <iostream> # ...
- HDU 4635 —— Strongly connected——————【 强连通、最多加多少边仍不强连通】
Strongly connected Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- HDU 4635 Strongly connected (Tarjan+一点数学分析)
Strongly connected Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- HDU 4635 Strongly connected(强连通)经典
Strongly connected Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 4635 Strongly connected 强连通缩点
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给你一个n个点m条边的图,问在图不是强连通图的情况下,最多可以向图中添多少条边,若图为原来 ...
随机推荐
- Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command
错误如下: Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibEx ...
- Android 连接 SQL Server (jtds方式)——下
本文主要补充介绍jtds的查询方法,将以博主的一个实际开发程序进行说明 下图是项目的文件列表与界面效果: 运行效果: 1.三个EditText对应的是单个计划的序号.品种名.数量 2 ...
- PC端手机访问跳转手机站点
第一种: var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.sr ...
- Notification封装(没做从网络下载)
1.Notification作为消息通知,这里简单封装了使用 建立一个bean package com.jcut.view; /** * Author:JsonLu * DateTime:2016/2 ...
- session在登录中的使用
package action.exam; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com. ...
- Linq101-Aggregate
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Aggrega ...
- trie树信息抽取之中文数字抽取
这一章讲一下利用trie树对中文数字抽取的算法.trie树是一个非常有用的数据结构,可以应用于大部分文本信息抽取/转换之中,后续会开一个系列,对我在实践中摸索出来的各种抽取算法讲开来.比如中文时间抽取 ...
- MySQL 管理
MySQL 管理 启动及关闭 MySQL 服务器 首先,我们需要通过以下命令来检查MySQL服务器是否启动: ps -ef | grep mysqld 如果MySql已经启动,以上命令将输出mysql ...
- C# Double String互转
/// <summary> /// str转金额 元 /// </summary> /// <param name="money"></p ...
- jQuery图片滑动
一个非常简单实用的jQuery插件 可以用在页面的顶部广告展示 http://slidesjs.com/ 一个需要注意的问题, 就是在手机等客户端(IOS8以上), 使用此插件时, 经常会触发插件的r ...