样例没过为什么A了?
查看原帖
样例没过为什么A了?
765763
Galsang楼主2024/8/5 11:28

rt,代码如下:

#include<bits/stdc++.h>
using namespace std;
const int inf=0x7f7f7f7f;
int m,n,x,y,ans,s,t;
struct edge
{
	int to,next,dis;
}e[10005];
int h[2005],cnt=1;
void add(int x,int y,int d)
{
	e[++cnt].to=y;
	e[cnt].dis=d;
	e[cnt].next=h[x];
	h[x]=cnt;
}
int dis[2005],now[2005];
bool bfs()
{
	queue<int>q;
	memset(dis,0,sizeof(dis));
	q.push(s),dis[s]=1,now[s]=h[s];
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		for(int i=h[x];i;i=e[i].next)
			if(dis[e[i].to]==0&&e[i].dis>0)
			{
				q.push(e[i].to);
				now[e[i].to]=h[e[i].to];
				dis[e[i].to]=dis[x]+1;
			}
	}
	return dis[t];
}
int dfs(int x,int f)
{
	if(x==t)return f;
	int k,res=0;
	for(int i=now[x];i&&f;i=e[i].next)
	{
		now[x]=i;
		if(e[i].dis>0&&dis[e[i].to]==dis[x]+1)
		{
			k=dfs(e[i].to,min(f,e[i].dis));
			e[i].dis-=k,e[i^1].dis+=k;
			res+=k,f-=k;
		}
	}
	return res;
}
int dinic()
{
	while(bfs())
		ans+=dfs(s,inf);
	return ans;
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>m>>n,s=0,t=n+1;
	while(1)
	{
		cin>>x>>y;
		if(x==-1&&y==-1)break;
		add(x,y,inf),add(y,x,0);
	}
	for(int i=1;i<=m;i++)
		add(s,i,1),add(i,s,0);
	for(int i=m+1;i<=n;i++)
		add(i,t,1),add(t,i,0);
	cout<<dinic()<<endl;
	for(int i=2;i<=cnt;i+=2)
		if(e[i^1].dis!=0&&1<=e[i].to&&e[i].to<=n&&1<=e[i^1].to&&e[i^1].to<=n)
			cout<<e[i^1].to<<" "<<e[i].to<<endl;
	return 0;
}
2024/8/5 11:28
加载中...