首页 > 其他分享 >每日一题-P1263

每日一题-P1263

时间:2024-07-23 16:58:00浏览次数:12  
标签:cnt 205 int 每日 vis 40005 P1263 一题 hd

一眼匈牙利,没有紫啊

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
int n,m,res,a[205][205],p[40005];
int id1[205][205],fr1[40005],cnt1,id2[205][205],fr2[40005],cnt2;
bool vis[40005];
struct edge{
	int v,nx;
}e[40005];
int cnt,hd[40005];
void add(int u,int v){
	e[++cnt]=edge{v,hd[u]};
	hd[u]=cnt;
}
vector<int> s;
bool match(int u){
	for(int i=hd[u];i;i=e[i].nx){
		int v=e[i].v;
		if(vis[v])continue;
		s.pb(v);vis[v]=1;
		if(!p[v] || match(p[v])){
			p[v]=u;
			return 1;
		}
	}
	return 0;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=0;i<=n;i++)a[i][0]=2;
	for(int i=0;i<=m;i++)a[0][i]=2;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&a[i][j]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			if(a[i][j]==2)continue;
			if(a[i][j-1]!=2)id1[i][j]=id1[i][j-1];
			else id1[i][j]=++cnt1,fr1[cnt1]=i;
			if(a[i-1][j]!=2)id2[i][j]=id2[i-1][j];
			else id2[i][j]=++cnt2,fr2[cnt2]=j;
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(!a[i][j])
				add(id1[i][j],id2[i][j]);
	for(int i=1;i<=cnt1;i++){
		if(match(i))res++;
		for(int j:s)vis[j]=0;
		s.clear();
	}
//	for(int i=1;i<=cnt2;i++)printf(" %d",p[i]);puts("");
	printf("%d\n",res);
	for(int i=1;i<=cnt2;i++)
		if(p[i])
			printf("%d %d\n",fr1[p[i]],fr2[i]);
	return 0;
}

不要忘记函数返回值

不要忘记函数返回值

不要忘记函数返回值

标签:cnt,205,int,每日,vis,40005,P1263,一题,hd
From: https://www.cnblogs.com/kentsbk/p/18318909

相关文章

  • 每日一题:Leetcode-322 零钱兑换
    力扣题目解题思路java代码力扣题目:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例......
  • 每日一题:Leetocde-70 爬楼梯
    力扣题目解题思路java代码力扣题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1.1阶+1阶2.2阶示例2:输入:n=3输出:3解释:有......
  • 每日一题-P1261
    其实想到方法了,但是以为复杂度炸了,好蠢#include<bits/stdc++.h>usingnamespacestd;#definepbpush_backintn,m,rk[30005],f[30005],g[30005],dis[30005],ans;boolvis[30005];vector<int>s;structedge{ intv,w,nx;}e[300005];intcnt,hd[30005];voidadd(intu,......
  • 每日一题-P1251
    网络流24题~#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintinf=1e9;constlllnf=1e18;intN,p,m,f,n,s,r[2005],st,ed;structedge{ intv,nx;llw;intc;}e[40005];intcnt,hd[4105];voidadd(intu,intv,llw,intc){ e[++cnt......
  • 【Golang 面试基础题】每日 5 题(三)
    ✍个人博客:Pandaconda-CSDN博客......
  • 7月22号python 每日一题
    7月22号python每日一题LCR121.寻找目标值-二维数组难度:中等m*n的二维数组plants记录了园林景观的植物排布情况,具有以下特性:每行中,每棵植物的右侧相邻植物不矮于该植物;每列中,每棵植物的下侧相邻植物不矮于该植物。请判断plants中是否存在目标高度值target。示......
  • 每日一题之快乐数问题
    题目:题目链接:快乐数题解:方法一:哈希表首先就是何种情况下不是快乐数,那就是处理过的结果多次重复出现的情况,那这里就可以通过哈希表在每次循环中存储处理后的结果,如果处理后的结果在哈希表中查找的到说明结果重复说明该数不是快乐数,退出循环即可,否则一直循环到处理结果为1......
  • Python每日学习
    我是从c++转来学习Python的,总感觉和c++相比Python的实操简单,但是由于写c++的代码多了,感觉Python的语法好奇怪就比如说c++的开头要有库(就是类似于#include<bits/stdc++.h>)而且它每一项的代码结束之后要有一个表示结束的封号(;),这种格式对于我来说已成习惯了,而这一切Python这个优......
  • GitHub每日最火火火项目(7.20)
    项目名称:mem0ai/mem0项目介绍:mem0是PersonalizedAI的内存层。它可能在个性化人工智能的开发中起到关键作用,具体的功能和特点可能包括高效的数据存储和管理,以支持个性化的模型训练和推理。通过优化内存使用,它可以提高人工智能系统的性能和响应速度,为用户提供更个性化......
  • GitHub每日最火火火项目(7.19)
    项目名称:mem0ai/mem0项目介绍:mem0是为个性化AI提供的内存层。它在个性化AI系统中可能起着关键作用,有助于高效地存储和管理数据,以支持个性化模型的训练和推理。通过优化内存使用,它可以提高AI系统的性能和响应速度,为用户提供更精准和个性化的服务。具体来说,它可能能够有效......