萌新样例都过不了,求帮忙
查看原帖
萌新样例都过不了,求帮忙
253738
听取MLE声一片楼主2021/1/5 22:57

Rt,qaq

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<complex>
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
const int inf=1<<30;
int n,m,s=1008,t=1009;
int ans[1050];
struct point{
    int v,next,val;
}a[5001];
int top=1,head[5001];
inline void add(int u,int v,int w){
    a[++top].v=v;
    a[top].val=w;
    a[top].next=head[u];
    head[u]=top;
}
int book[1001];
struct Pre{
    int v,edge; 
}b[5001];
inline bool bfs(){
    queue<int> q;
    memset(book,0,sizeof(book));
    memset(b,-1,sizeof(b));
    book[s]=1;
    q.push(s);
    while(!q.empty()){
        int u=q.front();
        q.pop();
        for(int i=head[u];i;i=a[i].next){
            int x=a[i].v;
            if(!book[x]&&a[i].val){
            	b[x].v=u;
            	b[x].edge=i;
            	if(x==t)
					return 1;
            	book[x]=1;
            	q.push(x);
            }
        }
    }
    return 0;
}
int EK(){
    int s1=0;
    while(bfs()){
        int minn=inf;
        for(int i=t;i!=s;i=b[i].v)
            minn=min(minn,a[b[i].edge].val);
        for(int i=t;i!=s;i=b[i].v){
        	ans[b[i].v]=i;
            a[b[i].edge].val-=minn;
            a[b[i].edge^1].val+=minn;
        }
    	s1+=minn;
	}
    return s1;
}
int main()
{
	m=read(),n=read();
	for(int i=1;i<=n;i++)
		add(i+n,t,1),add(t,i+n,0);
    for(int i=1;i<=m;i++)
		add(s,i,1),add(i,s,0);
    while(1){
    	int u,v;
    	u=read(),v=read();
    	if(u==-1&&v==-1)
			break;
    	add(u,v+n,1);
    	add(v+n,u,0);
    } 
    cout<<EK()<<endl;
    for(int i=1;i<=n;i++)
		if(ans[i]!=0)
			cout<<i<<' '<<ans[i]-n<<endl;
    return 0;
}

2021/1/5 22:57
加载中...