DLX TLE #8 #10 求调
查看原帖
DLX TLE #8 #10 求调
549499
Disjoint_cat楼主2022/12/3 17:15

RT,死循环还是效率太菜?

#include<bits/stdc++.h>
#define ll long long
#define YJL_DRC_LCH_WJY_WQY_ZZH using
#define AK namespace
#define IOI std
YJL_DRC_LCH_WJY_WQY_ZZH AK IOI;
const int N=505;
int n,m;
bool a;
struct Node
{
	int l,r,u,d,row,col;
}node[10005];
int ans[N],row[N],cnum[N],tot,dep;
void init_rc()
{
	for(int i=0;i<=m;i++)
	{
		node[i].l=i-1,node[i].r=i+1;
		node[i].u=node[i].d=i;
		node[i].row=0,node[i].col=i;
	}
	node[0].l=m,node[m].r=0,tot=m;
}
void addn(int r,int c)
{
	++tot;
	node[tot].row=r,node[tot].col=c;
	node[tot].u=node[c].u,node[c].u=tot;
	node[tot].d=c,node[node[tot].u].d=tot;
	int &rt=row[r];
	if(rt)
	{
		node[tot].l=node[rt].l,node[tot].r=rt;
		node[node[tot].l].r=tot,node[rt].l=tot;
	}
	else
	{
		rt=tot;
		node[tot].r=node[tot].l=tot;
	}
}
void delc(int c)
{
	for(int i=node[c].d;i!=c;i=node[i].d)
		for(int j=node[i].r;j!=i;j=node[j].r)
		{
			node[node[j].u].d=node[j].d;
			node[node[j].d].u=node[j].u;
			cnum[node[j].col]--;
		}
	node[node[c].r].l=node[c].l,node[node[c].l].r=node[c].r;
}
void resc(int c)
{
	node[node[c].r].l=node[node[c].l].r=c;
	for(int i=node[c].d;i!=c;i=node[i].d)
		for(int j=node[i].r;j!=i;j=node[j].r)
		{
			node[node[j].u].d=j;
			node[node[j].d].u=j;
			cnum[node[j].col]++;
		}
}
void dance()
{
	if(node[0].r==0)
	{
		for(int i=1;i<=dep;i++)cout<<ans[i]<<" ";
		exit(0);
	}
	int Col=node[0].r;
	for(int i=node[0].r;i;i=node[i].r)
		if(cnum[i]<cnum[Col])Col=i;
	delc(Col);
	dep++;
	for(int i=node[Col].d;i!=Col;i=node[i].d)
	{
		ans[dep]=node[i].row;
		for(int j=node[i].r;j!=i;j=node[j].r)delc(node[j].col);
		dance();
		for(int j=node[i].r;j!=i;j=node[j].r)resc(node[j].col);
	}
	resc(Col);
	dep--;
}
int main()
{
	freopen("P4929_8.in","r",stdin);
	freopen("P4929.out","w",stdout);
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	init_rc();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			cin>>a;
			if(a)addn(i,j);
		}
	dance();
	puts("No Solution!");
	return 0;
}
2022/12/3 17:15
加载中...