HDU3861

  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的更多相关文章

  1. hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】

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

  2. 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 ...

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

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

  4. 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 ...

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

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

  6. hdu——3861 The King’s Problem

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

  7. HDU 3861--The King’s Problem【scc缩点构图 &amp;&amp; 二分匹配求最小路径覆盖】

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

  8. hdu 3861 The King’s Problem

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  9. HDU——T The King’s Problem

    http://acm.hdu.edu.cn/showproblem.php?pid=3861 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

随机推荐

  1. 超全超详细的 ADB 用法大全

    原文地址:原文地址 基本用法 命令语法 为命令指定目标设备 启动/停止 查看 adb 版本 以 root 权限运行 adbd 指定 adb server 的网络端口 设备连接管理 查询已连接设备/模拟 ...

  2. 在Linux系统下统计当前文件夹下的文件个数、目录个数

    1.统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 如下图: 2.统计文件夹下目录的个数,包括子文件夹里的 ls -lR|grep &q ...

  3. Ubuntu桌面环境安装

    图形程序安装 运行StartX命令检查是否已安装,若提示未安装则执行: sudo apt-get install xinit 环境管理器 GNOME: sudo apt-get install gdm ...

  4. numpy数组广播

    numpy数组的广播功能强大,但是也同时让人疑惑不解,现在让我们来谈谈其中的原理. 广播原则: 如果两个数组的后缘维度(即:从末尾开始算起的维度)的轴长相符或其中一方的长度为1,则认为它们是广播兼容的 ...

  5. SDN原理 OpenFlow协议 -2

    本文由SDN原理视频而成:SDN原理 流表 FlowTable --- OpenFlow的核心 问题3 流表项 Flow Entry 单流表(OpenFlow 1.0版本) -> 多流表(Ope ...

  6. git status出现 fatal: Not a git repository (or any of the parent directories): .git

    fatal: Not a git repository (or any of the parent directories): .git 提示说没有.git这样一个目录,解决办法如下: git ini ...

  7. POJ 1780 Code(欧拉回路+非递归dfs)

    http://poj.org/problem?id=1780 题意:有个保险箱子是n位数字编码,当正确输入最后一位编码后就会打开(即输入任意多的数字只有最后n位数字有效)……要选择一个好的数字序列,最 ...

  8. RabbitMQ入门_03_推拉模式

    我们知道,消费者有两种方式从消息中间件获取消息: 推模式:消息中间件主动将消息推送给消费者 拉模式:消费者主动从消息中间件拉取消息 推模式将消息提前推送给消费者,消费者必须设置一个缓冲区缓存这些消息. ...

  9. Granting and Managing Item Level Permission using SharePoint2013 Designer Workflow

    https://gnanasivamgunasekaran.wordpress.com/2015/12/29/granting-and-managing-item-level-permission-u ...

  10. axis2 webservice jar包使用情况(转)

    原文地址:axis2 webservice jar包使用情况 今天使用axis2webservice,整理了下jar包,方便以后时候. axis2 webservice 服务端jar包: --> ...