题意  有n个城市 m条有向边

将n个城市分成几个州

1.强连通必定在一个州里

2.州里的任意两个城市  u,v     满足u到v 或者v到u  其一即可

先缩点  然后求最小路就覆盖

#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define pb push_back
#define REP(i,N)  for(int i=0;i<(N);i++)
#define CLR(A,v)  memset(A,v,sizeof A)
//
#define inf 0x3f3f3f3f
const int N=5000+5;
int head[20*N],pos;
struct Edge
{int to,nex;
}edge[20*N];
void add(int a,int b)
{edge[++pos].nex=head[a];head[a]=pos;edge[pos].to=b;
}
int low[N],dfn[N],inde,Stack[N],vis[N],tot,cnt,belong[N],out[N];vector<int>G[N];
int used[N];
void init()
{CLR(dfn,0);CLR(vis,0);CLR(low,0);CLR(out,0);pos=inde=tot=cnt=0;CLR(head,0);}
void tarjan(int x)
{dfn[x]=low[x]=++tot;Stack[++inde]=x;vis[x]=1;for(int i=head[x];i;i=edge[i].nex){int v=edge[i].to;if(!dfn[v]){tarjan(v);low[x]=min(low[x],low[v]);}else if(vis[v])low[x]=min(low[x],low[v]);}if(dfn[x]==low[x]){cnt++;int v;do{v=Stack[inde--];vis[v]=0;belong[v]=cnt;}while(v!=x);}
}bool dfs(int x)
{if(G[x].size())rep(j,0,G[x].size()-1){int t=G[x][j];if(!used[t]){used[t]=1;if(!vis[t]||dfs(vis[t])){vis[t]=x;return true;}}}return false;
}int find1(void )
{int ans=0;CLR(vis,0);rep(i,1,cnt){CLR(used,0);if(dfs(i))ans++;}return ans;
}int main()
{int cas;RI(cas);while(cas--){int n,m;RII(n,m);rep(i,1,m){int a,b;RII(a,b);add(a,b);}rep(i,1,n)if(!dfn[i])tarjan(i);rep(i,1,n){int u=belong[i];for(int j=head[i];j;j=edge[j].nex){int v=belong[ edge[j].to ];if(u!=v)G[u].pb(v);}}cout<<cnt-find1()<<endl;rep(i,1,cnt)G[i].clear();init();}return 0;
}

View Code

转载于:https://www.cnblogs.com/bxd123/p/10799521.html

The King’s Problem 强连通相关推荐

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

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

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

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

  3. The King’s Problem(tarjan求强连通分量缩点+匈牙利求有向无环图的最小路径覆盖)

    Link:http://acm.hdu.edu.cn/showproblem.php?pid=3861 The King's Problem Time Limit: 2000/1000 MS (Jav ...

  4. poj 1904 King's Quest 强连通分量+匹配

    ========== 题目链接King's Quest ============ 题解:通过原有的完美匹配,反向建边,在同一个强连通分量里面的王子和公主可以匹配,而不影响其他王子的结婚对象. //#i ...

  5. POJ - 1904 King's Quest 强连通tanjar思想

    传送门 题意:每个儿子都喜欢许多女孩,问每个渣男儿子最多有几个可以选择备胎.他爹也挺渣.. 猛地一看,哇二分匹配,但是想了想输入输出都能卡时间的题目,循环暴力二分匹配必T无疑,在做强连通模块的题所以想 ...

  6. POJ - 1904 King's Quest(强连通缩点)

    题目链接:点击查看 题目大意:给出n个王子和n个公主,每个王子都有喜欢的公主,每个王子初始时都娶到了一位喜欢的公主,题目需要我们求出每个王子所能娶的所有公主,必须保证王子娶了其中任何一个之后,其他的王 ...

  7. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  8. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  9. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  10. kk_想要学习的知识

    2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...

最新文章

  1. Python中的注释(转)
  2. Apache Spark 2.0预览: 机器学习模型持久化
  3. 【译】Swift算法俱乐部-Boyer-Moore字符串搜索
  4. 完整iOS APP发布App Store上架流程
  5. 数据中心节能环保政策汇总分析:2022年新建大型数据中心PUE需达到1.4以下
  6. 网络安全:HTTP Host 头攻击相关知识介绍
  7. 内部类访问局部变量的时候,为什么变量必须加上final修饰
  8. Linux IPTables:如何添加防火墙规则
  9. LeetCode(59):螺旋矩阵 II
  10. 【路径规划】基于matlab改进的人工势场算法机器人避障路径规划【含Matlab源码 1151期】
  11. python快乐数,快乐数 - SegmentFault 思否
  12. phpcms移动端和pc端_phpcms 实现PC端、手机端的双模版
  13. [GIS教程] 5.3 空间数据组织
  14. 北京功略----玩水篇
  15. ctfshow菜狗杯wp
  16. 开篇“给自己定一个目标,明年7月去实现。希望不是一时的兴起。”
  17. 国产操作系统和Linux
  18. CS5801|替代LT6711A|HDMI转DP转接线方案|HDMI转DP带供电芯片方案
  19. canvas 实现图片预览和下载
  20. Sublime Text 设置成中文版(完整教程)

热门文章

  1. 拓端tecdat|R语言在RCT中调整基线时对错误指定的稳健性
  2. 拓端tecdat|虎扑社区论坛数据爬虫分析报告
  3. 拓端tecdat|R语言中Gibbs抽样的Bayesian贝叶斯简单线性回归
  4. 拓端tecdat|R语言泊松Poisson回归模型分析案例
  5. 1、最小二乘回归、Lasso、岭回归
  6. sql语句截取字符串
  7. SVN仓库解决APIcloud2检出错误
  8. python pickle模块详解
  9. 35c语言编程,35编号c语言编程题08850.pdf
  10. 日志分析 批量给指定内容标记颜色 word 文本