HDU3861The King’s Problem
kosaraju缩点+最小路径覆盖
为什么是最小路径覆盖呢,我们假设有一个如下DAG图

目前我们1出发到了3处,对于3的儿子4、5、6,肯定是不能彼此到达的。所以最好的情况3只能延伸一个方向,比如4,解法
如代码。则有1—3—4,2,5,6,答案是4条。
#include<cstdio>
#include<cstring>
#include<stack>
#include<cstdlib>
#include<queue>
#include<memory.h>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
const int maxn=;
vector<int>G[maxn];
vector<int>G2[maxn];
vector<int>S;
vector<int>Map[maxn];
int scc[maxn],vis[maxn],n,m,scc_cnt,ans;
int link[maxn];
void _update(){
for(int i=;i<=n;i++) G[i].clear();
for(int i=;i<=n;i++) G2[i].clear();
memset(link,,sizeof(link));
memset(vis,,sizeof(vis));
memset(scc,,sizeof(scc));
S.clear();
ans=scc_cnt=;
}
void _dfs1(int v){
if(vis[v]) return ;
vis[v]=;
int L=G[v].size();
for(int i=;i<L;i++)_dfs1(G[v][i]);
S.push_back(v);
return ;
}
void _dfs2(int v){
if(scc[v]) return ;
scc[v]=scc_cnt;
int L=G2[v].size();
for(int i=;i<L;i++) _dfs2(G2[v][i]);
}
void _kosaraju()
{
for(int i=;i<=n;i++)_dfs1(i);
for(int i=n-;i>=;i--) {
if(!scc[S[i]]) {
scc_cnt++;
Map[scc_cnt].clear();
_dfs2(S[i]);
}
}
for(int i=;i<=n;i++)
{
int L=G[i].size();
for(int j=;j<L;j++){
if(scc[i]!=scc[G[i][j]]){
Map[scc[i]].push_back(scc[G[i][j]]);
}
}
}
}
bool _find(int v){
int L=Map[v].size();
for(int i=;i<L;i++)
{
if(!vis[Map[v][i]]){
vis[Map[v][i]]=;
if(!link[Map[v][i]]||_find(link[Map[v][i]])){
link[Map[v][i]]=v;
return true;
}
}
}
return false;
}
int main()
{
int T,i,j,u,v;
scanf("%d",&T);
while(T--){
_update();
scanf("%d%d",&n,&m);
for(i=;i<=m;i++){
scanf("%d%d",&u,&v);
G[u].push_back(v);
G2[v].push_back(u);
}
_kosaraju();
for(i=;i<=scc_cnt;i++){
memset(vis,,sizeof(vis));
if(_find(i)) {
ans++;
}
}
printf("%d\n",scc_cnt-ans);//以Map图位对象,不是n
}
return ;
}
HDU3861The King’s Problem的更多相关文章
- hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 3861 The King’s Problem trajan缩点+二分图匹配
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 3861.The King’s Problem 强联通分量+最小路径覆盖
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 3861 The King’s Problem(tarjan缩点+最小路径覆盖:sig-最大二分匹配数,经典题)
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
HDU 3861 The King's Problem 题目链接 题意:给定一个有向图,求最少划分成几个部分满足以下条件 互相可达的点必须分到一个集合 一个对点(u, v)必须至少有u可达v或者v可达 ...
- hdu——3861 The King’s Problem
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 3861--The King’s Problem【scc缩点构图 && 二分匹配求最小路径覆盖】
The King's Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 3861 The King’s Problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- HDU——T The King’s Problem
http://acm.hdu.edu.cn/showproblem.php?pid=3861 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
随机推荐
- Python 字符串转换为日期
应用程序接受字符串格式的输入,但是你想将它们转换为datetime 对象以便在上面执行非字符串操作. 使用Python 的标准模块datetime 可以很容易的解决这个问题.比如: >>& ...
- C#——文件操作类简单封装
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO ...
- pyDay11
内容来自廖雪峰的官方网站. 1.杨辉三角generator: def triangles(): L = [1] while True: yield L L.append(0) L = [L[i-1] ...
- Mysql性能调优工具Explain结合语句讲解
Explain简称执行计划,可以模拟SQL语句,来分析查询语句或者表结构是否有性能瓶颈.Explain的作用有哪些,可以看到哪些?可以看到表的读取顺序,数据读取操作的操作类型,哪些索引可以使用,哪些索 ...
- 2017-2018-1 JaWorld 团队作业--冲刺5
2017-2018-1 JaWorld 团队作业--冲刺5(20162310) 团队项目之战斗机类分析博客 总结 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模 ...
- HDU 4990 Reading comprehension(矩阵快速幂)题解
思路: 如图找到推导公式,然后一通乱搞就好了 要开long long,否则红橙作伴 代码: #include<set> #include<cstring> #include&l ...
- 框架-springmvc源码分析(一)
框架-springmvc源码分析(一) 参考: http://www.cnblogs.com/heavenyes/p/3905844.html#a1 https://www.cnblogs.com/B ...
- POJ 1780 Code(欧拉回路+非递归dfs)
http://poj.org/problem?id=1780 题意:有个保险箱子是n位数字编码,当正确输入最后一位编码后就会打开(即输入任意多的数字只有最后n位数字有效)……要选择一个好的数字序列,最 ...
- python 使用两个列表合成字典
keys = ['red', 'green', 'blue'] values = ['#FF0000','#008000', '#0000FF'] color_dictionary = dict(zi ...
- Phpstorm Alt+Enter 自动导入类
很方便!!!能够自动提示哪些类没有自动加载!!!然后Alt+Enter进行安装!!!