t个样例

n个点m条边

分成一些区

2个点互相能到达必须分在一个区

一个区中任何2个点可以u->v 或者v->u

任何点都要有自己的区

求最小的区的数目

强联通缩点

成新图

二分匹配 求最大匹配

最小路径覆盖=点数-最大匹配数

 #include<stdio.h>
#include<algorithm>
#include<string.h>
#include<stack> using namespace std; #define MAXN 5010
#define MAXN1 100010
int head[MAXN],dfn[MAXN],low[MAXN],cou[MAXN],fa[MAXN];
int cnt,k,num;
bool vis[MAXN],mark[MAXN]; struct edg
{
int next,to,fr;
}x[MAXN1];
void add(int u,int v)
{
x[cnt].next=head[u];
x[cnt].fr=u;
x[cnt].to=v;
head[u]=cnt++;
}
stack<int>s; void dfs(int u)
{
low[u]=dfn[u]=k++;
vis[u]=;
s.push(u);
int i;
for(i=head[u];i!=-;i=x[i].next)
{
int v=x[i].to;
if(!dfn[v])
{
dfs(v);
low[u]=min(low[u],low[v]);
}
else if(vis[v])
low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u])
{
num++;
while(!s.empty())
{
int now=s.top();
s.pop();
vis[now]=;
fa[now]=num;
if(now==u)break;
}
}
}
int pa[MAXN]; bool dfs1(int u)
{
int i;
for(i=head[u];i!=-;i=x[i].next)
{
if(mark[x[i].to])
continue;
mark[x[i].to]=;
if(pa[x[i].to]==-||dfs1(pa[x[i].to]))
{
pa[x[i].to]=u;
return ;
}
}
return ; //很重要
}
int main()
{
int t;
scanf("%d",&t); while(t--)
{
int n,m,i;
scanf("%d%d",&n,&m);
cnt=;
memset(head,-,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low)); for(i=;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
}
k=;
num=;
for(i=;i<=n;i++) //强联通
if(!dfn[i])
dfs(i);
memset(head,-,sizeof(head));
memset(pa,-,sizeof(pa));
int en=cnt;
cnt=;
for(i=;i<en;i++)
{
int u,v;
u=fa[x[i].fr];
v=fa[x[i].to];
if(u!=v)
{
add(u,v);
}
}
int ans=; for(i=;i<=num;i++) //二分匹配
{
memset(mark,,sizeof(mark));
if(dfs1(i))
ans++;
}
printf("%d\n",num-ans);
} return ;
}

强连通 HDU 3861的更多相关文章

  1. HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)

    HDU 3861 The King's Problem 题目链接 题意:给定一个有向图,求最少划分成几个部分满足以下条件 互相可达的点必须分到一个集合 一个对点(u, v)必须至少有u可达v或者v可达 ...

  2. HDU 3861 The King’s Problem 最小路径覆盖(强连通分量缩点+二分图最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 最小路径覆盖的一篇博客:https://blog.csdn.net/qq_39627843/ar ...

  3. HDU 3861 The King’s Problem(强连通分量+最小路径覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 题目大意: 在csdn王国里面, 国王有一个新的问题. 这里有N个城市M条单行路,为了让他的王国 ...

  4. HDU 3861 The King's Problem(强连通分量缩点+最小路径覆盖)

    http://acm.hdu.edu.cn/showproblem.php?pid=3861 题意: 国王要对n个城市进行规划,将这些城市分成若干个城市,强连通的城市必须处于一个州,另外一个州内的任意 ...

  5. HDU 3861 The King’s Problem 强连通分量 最小路径覆盖

    先找出强连通分量缩点,然后就是最小路径覆盖. 构造一个二分图,把每个点\(i\)拆成两个点\(X_i,Y_i\). 对于原图中的边\(u \to v\),在二分图添加一条边\(X_u \to Y_v\ ...

  6. HDU 3861 The King’s Problem (强连通缩点+DAG最小路径覆盖)

    <题目链接> 题目大意: 一个有向图,让你按规则划分区域,要求划分的区域数最少. 规则如下:1.所有点只能属于一块区域:2,如果两点相互可达,则这两点必然要属于同一区域:3,区域内任意两点 ...

  7. 缩点+最小路径覆盖 hdu 3861

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 题意:输入t,表示t个样例.接下来每个样例第一行有两个数n,m表示点数和有向边的数量,接下来输入 ...

  8. HDU 3861.The King’s Problem 强联通分量+最小路径覆盖

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. 强连通 HDU 3639

    t个样例 n个点 m条边 求有手帕最多的人 A->B B->C C 2块 可以传递 先强联通一下 这里的权是强连通分量中有几个点 然后要建一下反图 入度为0的点就有可能是最大的点 #inc ...

随机推荐

  1. Gvr SDK for Unity 分析(一)

    Gvr SDK概述 通过谷歌VR SDK for unity 为Android和iOS 构建虚拟现实应用程序 unity SDK在Android上支持构建应用程序for daydream 和 card ...

  2. String的高级用法(String.Format)

    string.Format C#的String.Format的一般地我们可以直接使用string.format()或int.ToString()和float.ToString() 下面是一些Strin ...

  3. 在虚拟机中安装CentOS7

    在虚拟机中安装CentOS7 听语音 | 浏览:17352 | 更新:2014-10-31 12:14 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师傅最快的到家服务,最优质的电脑清灰! 百 ...

  4. 为什么那么多人想开发一元夺宝类app?

    别拿你的无知和愚蠢,来证明主观的判断! 国人对一切事物具有怀疑的本性是好的, 但是若不建立于科学的分析方法, 那就是愚昧! 身边有朋友玩夺宝投入较多,产出较少,于是向我求助.想从数据分析的角度知道到底 ...

  5. iOS UITableView 分割线从零开始

    第一种(不自己画线): 代码如下 // tableView的分割线从零开始 -(void)viewDidLayoutSubviews { if ([self.tableView respondsToS ...

  6. javascript动态创建script标签,加载完成后调用回调

    代码如下: var head = document.getElementsByTagName('head')[0]; var script = document.createElement('scri ...

  7. javascript中获取屏幕尺寸

    Javascript获取获取屏幕.浏览器窗口 ,浏览器,网页高度.宽度的大小 屏幕的有效宽:window.screen.availHeight屏幕的有效高:window.screen.availWid ...

  8. Meet Python: little notes 2

    From this blog I will turn to Markdown for original writing. Source: http://www.liaoxuefeng.com/ ♥ l ...

  9. 转:如何在32位程序中突破地址空间4G的限制

    //如何在32位程序中突破地址空间4G的限制 //首先要获得内存中锁定页的权限 #define _WIN32_WINNT 0x0501 //xp系统 #include <windows.h> ...

  10. IE8和W3C标准下IFRAME刷新和URL的区别

    一个页面中包含了一个iframe,我们要刷新这个iframe的情况 url在IE8和W3C以及IE11的区别如下: URL使用相对路径,绝对路径比如http://localhost:5568/替换成I ...