rt,自闭了……
#include<bits/stdc++.h>
using namespace std;
int head[205],head2[205][205],nxt[205<<1],nxt2[205<<1],v[205<<1],v2[205<<1],dist[205<<1],t,edgenum,edgenum2,b[205],cnt[205][205];
bool vis[205];
inline void add(int x,int y){
v[++edgenum]=y;nxt[edgenum]=head[x];head[x]=edgenum;
}
inline bool f(int a){
if(vis[a])return false;
vis[a]=true;
for(int e=head[a];e;e=nxt[e])
if(!dist[e]&&(!b[v[e]]||f(b[v[e]]))){
b[v[e]]=a;
return true;
}
return false;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
for(int n;t--;){
edgenum=edgenum2=0;
memset(head,0,sizeof(head));
memset(v,0,sizeof(v));
memset(nxt,0,sizeof(nxt));
memset(cnt,0,sizeof(cnt));
memset(head2,0,sizeof(head2));
memset(v2,0,sizeof(v2));
memset(nxt2,0,sizeof(nxt2));
memset(dist,0,sizeof(dist));
cin>>n;
for(int i=1;i<=n;++i)
for(int j=1,a;j<=n;++j){
cin>>a;
add(i,a);
v2[++edgenum2]=j;nxt2[edgenum2]=head2[i][a];head2[i][a]=edgenum2;
}
for(int i=1;i<=n;++i){
memset(b,0,sizeof(b));
for(int j=1;j<=n;++j){
memset(vis,false,sizeof(vis));
f(j);
}
for(int j=1;j<=n;++j){
int a=b[j];
cnt[a][i]=v2[head2[a][j]];head2[a][j]=nxt2[head2[a][j]];
for(int k=head[a];k;k=nxt[k])
if(!dist[k]&&v[k]==j){
dist[k]=1;
break;
}
}
}
cout<<(n*(n-1)>>1)<<"\n";
for(int i=1;i<=n;++i)
for(int j=1;j<i;++j)
cout<<i<<" "<<cnt[i][j]<<" "<<j<<" "<<cnt[j][i]<<"\n";
}
return 0;
}
除了 Subtack #2 过了 4 个点之外全 TLE