rt,下载数据本地AC,洛谷IDE也对,为什么。。。
code:
#include<bits/stdc++.h>
#define int long long
#define inf 1e9
using namespace std;
struct Edge{
int to,nxt,w;
}edge[1010];
int head[1010],dis[1010],cur[1010],n,m,s,t,cnt;
void add(int u,int v,int w)
{
edge[cnt].nxt=head[u];
edge[cnt].to=v;
edge[cnt].w=w;
head[u]=cnt++;
}
bool bfs()
{
memset(dis,0,sizeof(dis));
queue<int> q;
q.push(s);
cur[s]=head[s];
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=head[x];~i;i=edge[i].nxt)
{
int y=edge[i].to;
if(dis[y]||!edge[i].w||y==s) continue;
cur[y]=head[y];
dis[y]=dis[x]+1;
q.push(y);
}
}
if(dis[t]) return true;
else return false;
}
int nt[1010],fst[1010];
int dfs(int x,int flow)
{
if(x==t) return flow;
for(int &i=cur[x];~i;i=edge[i].nxt)
{
int y=edge[i].to;
int k=flow;
if(dis[y]==dis[x]+1&&edge[i].w>0)
{
k=min(k,edge[i].w);
int res=dfs(y,k);
if(res!=0)
{
nt[x]=y;
if(x!=s) fst[y-n]=1;
edge[i].w-=res;
edge[i^1].w+=res;
return res;
}
}
}
return 0;
}
void print()
{
for(int i=1;i<=n;i++)
{
int x=i;
if(!fst[x])
{
cout<<x<<" ";
while(nt[x]!=t&&nt[x])
{
cout<<nt[x]-n<<" ";
x=nt[x]-n;
}
cout<<'\n';
}
}
}
signed main()
{
memset(head,-1,sizeof(head));
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v;
add(u,v+n,1);
add(v+n,u,0);
}
s=0,t=2*n+1;
for(int i=1;i<=n;i++) add(s,i,1),add(i,s,0),add(i+n,t,1),add(t,i+n,0);
int qaq=0,ans=0;
while(bfs()!=0)
while(qaq=dfs(s,inf)) ans+=qaq;
print();
cout<<n-ans;
}