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

<题目链接>

题目大意:

一个有向图,让你按规则划分区域,要求划分的区域数最少。

规则如下:1.所有点只能属于一块区域;2,如果两点相互可达,则这两点必然要属于同一区域;3,区域内任意两点至少有一方能够到达另一方。

解题分析:

双连通的两点必须要属于一块区域,所以可以直接对相互连通的点进行缩点,然后再分析缩点后的图像,因为题目要求划分的区域最少,且区域内的"点"之间至少有一方能够到达另一方。仔细思考后,发现就是对缩点后的图求最小路径覆盖。区域内的"点"至少要有一方能够到达另一方,所以"点"之间连接的道路就可以看成他们之间的匹配关系。图的最小路径覆盖=总点数-最大匹配数。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <vector>
 4 #include <algorithm>
 5 #include <cstring>
 6 using namespace std;
 7 
 8 #define clr(a,b) memset(a,b,sizeof(a))
 9 #define rep(i,s,t) for(int i=s;i<=t;i++)
10 #define pb push_back
11 const int N = 5e3+10;
12 int  dfn[N], low[N], stk[N], belong[N], vis[N], match[N];
13 bool instk[N];
14 int top, scc, tot, n, m, T;
15 vector<int>vt[N],G[N];
16 
17 void init(){
18     top=scc=tot=0;
19     clr(dfn,0);clr(low,0);clr(instk,false);
20 }
21 void Tarjan(int u){       //tarjan进行缩点
22     dfn[u]=low[u]=++tot;
23     stk[++top]=u;instk[u]=1;
24     for(int i=0; i<vt[u].size(); i++){
25         int v=vt[u][i];
26         if(!dfn[v]){
27             Tarjan(v);
28             low[u]=min(low[u],low[v]);
29         }else if(instk[v])
30             low[u]=min(low[u],dfn[v]);
31     }
32     if(low[u]==dfn[u]){
33         scc++;
34         while(true){
35             int v=stk[top--];
36             instk[v]=0;
37             belong[v]=scc;
38             if(v==u)break;
39         }
40     }
41 }
42 bool dfs(int u){    
43     for(int i=0; i<G[u].size(); i++){
44         int v=G[u][i];
45         if(!vis[v]){
46             vis[v]=1;
47             if(match[v]==-1||dfs(match[v])){
48                 match[v]=u;
49                 return true;
50             }
51         }
52     }
53     return false;
54 }
55 int Hungary(){    //匈牙利匹配,对缩点后的"点"求最大匹配
56     int res=0;
57     clr(match,-1);
58     rep(i,1,scc){
59         clr(vis,0);
60         if(dfs(i))res++;
61     }
62     return res;
63 }
64 int main(){
65     scanf("%d",&T);while(T--){
66         scanf("%d%d",&n,&m);
67         for(int i=0; i<=n; i++) vt[i].clear();
68         rep(i,1,m){
69             int u,v;scanf("%d%d",&u,&v);
70             vt[u].pb(v);
71         }
72         init();
73         rep(i,1,n)
74             if(!dfn[i]) Tarjan(i);     //对所有双连通的点进行缩点
75         rep(i,0,n)G[i].clear();
76         rep(u,1,n) for(int i=0;i<vt[u].size();i++){
77             int v=vt[u][i];
78             if(belong[u]!=belong[v])
79                 G[belong[u]].pb(belong[v]);   
80         }
81         int res=Hungary();
82            printf("%d\n",scc-res);    //求出缩点后的"点"的最小路径覆盖
83     }
84 }

 

 

2018-11-27

转载于:https://www.cnblogs.com/00isok/p/10029254.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nagios常见问题

1.错误“CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.”解决&#xff1a;启用了NRPE的命令行参数功能&#xff0c;不过可能会带来严重的安全问题。$ /usr/local/nagios/etc/nrpe.cfgdont_blame_nrpe12.在Nagios中&#xff0c;…

【Linux 命令】- find 命令

find 是日常工具箱中功能更强大、更灵活的命令行工具之一&#xff0c;因此值得花费更多的时间。 最简单的&#xff0c;find 跟上路径寻找一些东西。例如&#xff1a; find / 它将找到&#xff08;并打印出&#xff09;系统中的每个文件。而且由于一切都是文件&#xff0c;你会得…

CentOS提示另一个目前运行的程序正在访问软件信息

原因是&#xff1a;yum&#xff0d;updatesd服务一起的&#xff0c;这个服务会时不时的访问网络&#xff0c;如果卡住了&#xff0c;同时你又在运行yum&#xff0c;就会总是提示你另一程序在访问软件信息用 rm -f /var/run/yum.pid 杀掉 yum-updatesd 就好了命令如下&#xff1…

一个注解搞定

JsonIgnore 转载于:https://www.cnblogs.com/cnchengv/p/10033524.html

check_http语法和选项

check_http H hostname (or) -I ip-address {optional options} 常用的几个例子 1. 检测http协议 $ check_http -H 192.168.1.50 HTTP OK HTTP/1.1 200 OK - 332 bytes in 0.004 seconds |time0.004144s;;;0.000000 size332B;;;0 2.检测https协议 $ check_http -H 192.168.1.50…

LinkedList源码学习

链表数据结构 当前节点会保存上一个、下一个节点。 参见 LinkedList的Node类   实现&#xff1a;     1. 内部链表的方式。       1.1 添加元素。追加的方式&#xff0c;创建一个新的节点[Node]&#xff0c;用最后一个节点关联新的节点。       1.2 删除元素…

nagios使用check_mysql监控mysql

如果没有check_mysql插件&#xff0c;需要安装Mysql数据库 1、建立专用数据库&#xff1a; [rootsvr3 ~]#mysql -u root -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 51910 Server version: 5.5.3-m3-log Sou…

python_文件操作代码实例

"""提示&#xff1a;代码中的内容均被注释&#xff0c;请参考&#xff0c;切勿照搬""" 1 #文件的打开和关闭2 3 文件对象 open(文件名,使用方式)4 rt&#xff1a;读取一个txt文件5 wt: 只写打开一个txt文件&#xff0c;&#xff08;如果没有该…

nagios远程系统监测服务

nagios全部的服务大致可以分为3大种&#xff1a;第一种是“本地系统监测服务”&#xff0c;就是监测主机Nagios所在主机对自己本地的一些情况的监测&#xff0c;比如本地磁盘占用情况&#xff0c;本地CPU使用情况等等。第二种是“远程系统监测服务”&#xff0c;就是远程主机系…

Spring中@Async

在Java应用中&#xff0c;绝大多数情况下都是通过同步的方式来实现交互处理的&#xff1b;但是在处理与第三方系统交互的时候&#xff0c;容易造成响应迟缓的情况&#xff0c;之前大部分都是使用多线程来完成此类任务&#xff0c;其实&#xff0c;在spring 3.x之后&#xff0c;…

Mysql不能停用

Timeout error occurred trying to start MySQL Daemon.Starting MySQL: [FAILED]

CentOs如何挂载硬盘

远程SSH登录上Centos服务器后&#xff0c;进行如下操作提醒&#xff1a;挂载操作会清空数据&#xff0c;请确认挂载盘无数据或者未使用第一步&#xff1a;列出所有磁盘 命令&#xff1a; ll /dev/disk/by-path 提示&#xff1a;如果无法确认数据盘设备名称&#xff0c;请使…

挂载

df -Th 查看磁盘挂载情况 ls /dev/sdx* fdisk -l 查看分区情况 fdisk /dev/sdb 分区mnpw uuid:设备的唯一号 blkidUUID"0a59654a-6f2c-4bc1-bbaf-df844e60e2e3" UUID"fe8c9dd4-571c-40a4-837a-a4ab6e4ae7e转载于:https://www.cnblogs.com/finddata/p/10041496.h…

一周冲刺计划2//第一天

第二次一周冲刺计划 2018.12.1 今天开展了小组间的站立会议&#xff0c;四个人仔细分析了第一次冲刺计划中软件的不足&#xff0c;对其的不足之处进行了深刻的反省和分析&#xff0c;并做出相应的修改。首先做出UI界面&#xff0c;对界面进行修改。明天对代码进行修改。转载于:…

linux版的navicat提示丢失scilexer.dll

这是由于SELinux阻止了scilexer.dll加载 &#xff0c;只要解除阻止就可以了。命令解除&#xff1a;如果SELinux是处于强制安全模式时需要做getenforce令SELinux处于容许模式setenforce 0chcon -t textrel_shlib_t scilexer.dll的路径

AWS EC2实例Ubuntu系统设置root用户密码并使用root/ubuntu用户登录

参考链接&#xff1a;http://www.wangchao.info/1137.html 注意&#xff1a;链接中写的简化了&#xff0c;其中重启服务的命令似乎不太适用&#xff0c;可能是不通用&#xff0c;我下面描述的方式亲测可行&#xff0c;如有其他疑问请留言&#xff1b; https://blog.csdn.net/p…

最全的纯净系统下载地址

http://msdn.itellyou.cn/?langzh-cn

坑题

题目描述 小姐姐想要配 n 把钥匙&#xff0c;她走过开锁铺问老板价钱&#xff0c;老板是这么说的&#xff1a; 小姐姐想知道完成配n把钥匙的任务最少需要花费多少钱 输入描述: 题目有多组测试数据。第一行输入一个整数T&#xff08;组数少于100组&#xff09;&#xff0c;表示测…

windows 下架设svn服务器

一、准备工作1、获取 Subversion 服务器程序 到官方网站&#xff08;http://www.collab.net/downloads/subversion &#xff09;下载最新的服务器安装程序。目前最新的是1.7.7版本. 2、获取 TortoiseSVN 客户端程序从官方网站 http://tortoisesvn.net/downloads 获取最新的 To…

最简单的nginx教程 - 如何把一个web应用部署到nginx上

Nginx (engine x) 是一个高性能的HTTP和反向代理服务&#xff0c;也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点&#xff08;俄文&#xff1a;Рамблер&#xff09;开发的&#xff0c;第一个公开版本0.1.0发布于2004年10月4日…