调崩了
查看原帖
调崩了
471015
CO2_楼主2023/9/19 21:14

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

2023/9/19 21:14
加载中...