洛谷 P2319 [HNOI2006] 超级英雄(匈牙利算法)

题目传送门

解题思路

将题目和锦囊妙计建边,然后对于每一个问题,都跑一次匈牙利,如果当前问题找不到与之配对的锦囊妙计,那么直接停止(因为题目说了答不出就不能往下答了)。

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int n,m,ans;
vector<int> e[100001];
int vis[100001],last[100001];
int an[100001];
bool dfs(int x,int k)
{
	if(vis[x]==k)
		return 0;
	vis[x]=k;
	for(auto y:e[x])
	{
		if(last[y]==0||dfs(last[y],k))
		{
			last[y]=x;
			an[x]=y;
			return 1;
		}
	}
	return 0;
}
int main()
{
	cin>>n>>m;
	int x,y;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		x++,y++;
		e[i].push_back(x);
		e[i].push_back(y);
	}
	int ti=0;
	for(int i=1;i<=m;i++)
	{
		ti++;
		if(dfs(i,ti))ans++;
		else break;
	}
	cout<<ans<<endl;
	for(int i=1;i<=m;i++)
		if(an[i])
			cout<<an[i]-1<<endl;
}
相关推荐
岛雨QA13 小时前
栈「Java数据结构与算法学习笔记4」
数据结构·算法
乐观勇敢坚强的老彭14 小时前
c++寒假营day05
开发语言·c++·算法
枫叶丹414 小时前
【Qt开发】Qt界面优化(七)-> Qt样式表(QSS) 样式属性
c语言·开发语言·c++·qt
重生之后端学习14 小时前
74. 搜索二维矩阵
开发语言·数据结构·算法·职场和发展·深度优先
JYeontu14 小时前
程序员都该掌握的“质因数分解”
前端·javascript·算法
with-the-flow14 小时前
从数学底层的底层原理来讲 random 的函数是怎么实现的
c语言·python·算法
tyb33333314 小时前
leetcode:吃苹果和队列
算法·leetcode·职场和发展
多恩Stone14 小时前
【3D-AICG 系列-15】Trellis 2 的 O-voxel Shape: Flexible Dual Grid 代码与论文对应
人工智能·python·算法·3d·aigc
weixin_4481199414 小时前
Datawhale 大模型算法全栈基础篇 202602第4次笔记
笔记·算法
sali-tec14 小时前
C# 基于OpenCv的视觉工作流-章27-图像分割
图像处理·人工智能·opencv·算法·计算机视觉