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 ...
随机推荐
- 2.6 The Object Model -- Bindings
一个binding在两个属性之间创建一个链接,当一个改变时,另外一个被自动更新为一个新的值. bindings可以在同一个对象中连接两个属性,或者用在两个不同的对象中. 不像大多数框架一样包含某种形式 ...
- SpringData_PagingAndSortingRepository接口
该接口提供了分页与排序功能 Iterable<T> findAll(Sort sort); //排序 Page<T> findAll(Pageable pageable); / ...
- (17)ClippingNode的使用
概述 ClippingNode(裁剪节点)可以用来对节点进行裁剪,可以根据一个模板切割图片的节点,生成任何形状的节点显示. ClippingNode是Node的子类,可以像普通节点一样放入Layer, ...
- 文字和图片居中的HTML代码怎么写?
HTML 代码 ,怎么将文本/ 图片居中?这是在W3Cschool的编程问答中前端♌蕾儿提出的问题.网友施主同西否给出了详细的解答. html文字居中和html图片居中方法代码,通过在html中实现文 ...
- node必知必会之node简介
1.什么是node.js 按照: Node.js官方网站主页 的说法: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript ...
- jmeter dubbo接口测试
说在前面,测试熔断降级系统时,要求测试一下对应的dubbo接口性能 1.安装Jmeter 2.将dubbo依赖包下载好放在jmeter路径/lib/ext下, 3.打开jmeter,测试计划下新建线程 ...
- Java数据结构和算法总结-字符串相关高频面试题算法
前言:周末闲来无事,看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说了,直接上笔 ...
- 【运维技术】CentOS7上从零开始安装LAMP安装织梦DedeCMS教程
前期准备数据 centos7 系统 安装 appache httpd # 更新httpd yum update httpd # 安装httpd yum install -y httpd # 启动服务 ...
- TED #06# Questioning the universe
Stephen Hawking: Questioning the universe 1. 第一段: There is nothing bigger or older than the universe ...
- Pandas数据分析python环境说明文档
1. 要求windows系统 2. pycharm编程环境并要求配置好python3.x环境 pycharm可在官网下载,下面是链接. https://www.jetbrains.com/zh/pyc ...