bzoj 1143 [CTSC2008]祭祀river(最小链覆盖)

2023-12-24 06:08

本文主要是介绍bzoj 1143 [CTSC2008]祭祀river(最小链覆盖),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1143


在南宁被这个题无限关。。。

将每个点分成两个集合X和Y,如果a到b有一条路径,就添加一条aX到bY的边,然后跑出最大匹配,然后n-最大匹配数就是最小链覆盖。


代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=110;
int n,m;
bool used[MAXN],g[MAXN][MAXN];//邻接矩阵 
int linker[MAXN];
bool dfs(int u)
{for(int v=1;v<=n;v++)if(g[u][v]&&!used[v]){used[v]=true;if(linker[v]==-1||dfs(linker[v])){linker[v]=u;return true;}}return false;
}
int hungary()
{int res=0; memset(linker,-1,sizeof(linker));for(int u=1;u<=n;u++){memset(used,false,sizeof(used));if(dfs(u))res++;}return res;
}
void solve()
{memset(g,false,sizeof(g));for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);g[u][v]=true;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){g[i][j]|=g[i][k]&g[k][j];}}}printf("%d\n",n-hungary());
}
int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);while(~scanf("%d%d",&n,&m)){solve();}return 0;
}


这篇关于bzoj 1143 [CTSC2008]祭祀river(最小链覆盖)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530771

相关文章

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

最大流=最小割=最小点权覆盖集=sum-最大点权独立集

二分图最小点覆盖和最大独立集都可以转化为最大匹配求解。 在这个基础上,把每个点赋予一个非负的权值,这两个问题就转化为:二分图最小点权覆盖和二分图最大点权独立集。   二分图最小点权覆盖     从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 建模:     原二分图中的边(u,v)替换为容量为INF的有向边(u,v),设立源点s和汇点t

POJ3041 最小顶点覆盖

N*N的矩阵,有些格子有物体,每次消除一行或一列,最少要几次消灭完。 行i - >列j 连边,表示(i,j)处有物体,即 边表示 物体。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;impo

Minimal coverage -uva 覆盖线段,贪心

一道经典的贪心问题,具体方法就是将(an,bn)区间,按照an从小到大的顺序进行排序,之后从0开始, 取最大的有效区间,这里用到了结构体的快排,否则可能会超时. #include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX_SIZE 100000 + 10#define BOTTOM -50000 - 10str

过滤器:覆盖过滤器如何在凝结水处理系统中应用

本文介绍了覆盖过滤器的基本原理,阐述了覆盖过滤器处理凝结水中悬浮物和胶体的工艺流程及铺膜、过滤、爆膜等环节的操作规范。指出覆盖过滤器在运行中存在铺不上膜、铺膜不匀、脱膜等常见的故障并提出处理方法。   0·引言   凝结水处理系统设置覆盖过滤器的目的是除去凝结水中的金属腐蚀物及油类等杂质。这些杂质通常为悬浮颗粒和胶体,如果不被滤除,会污染离子交换树脂,反冲洗过滤器原理使其交换量下降,工作周

AcWing907. 区间覆盖

参考的视频讲解:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 【贪心算法08-区间问题03-区间覆盖】 每次贪心就是选择左端点里面<起始端点里面右边界最大的,这样就是保证了最少区间个数! 然后每次迭代都会更新一次起始端点st,反复运用本算法。 一定要仔细看视频讲解!!! #include<iostream>#include<algorithm>#define N 100010#define INF 2

牛客网《剑指Offer》 矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution {public:int rectCover(int number) {if(number==0) return 0;if(number==1) return 1;if(number==2) return 2;retu

【HDU】3861 The King’s Problem 强连通缩点+有向图最小路径覆盖

传送门:【HDU】3861 The King’s Problem 题目分析:首先强连通缩点,因为形成一个环的王国肯定在一条路径中,这样才能保证拆的少。 然后缩点后就是DAG图了,由于题目要求的是最小路径覆盖,那么二分匹配即可。 代码如下: #include <cstdio>#include <cstring>#include <algorithm>#includ

【BZOJ】1324 Exca王者之剑 最大权独立集

传送门:【BZOJ】1324  Exca王者之剑 题目分析:赤裸裸的最大权独立集。。。最小割解决 代码如下: #include <cstdio>#include <vector>#include <cstring>#include <algorithm>using namespace std ;#define REP( i , a , b ) for ( int