为什么我最后两个点超时了???(有无大佬来康康)
查看原帖
为什么我最后两个点超时了???(有无大佬来康康)
1148832
LabmemNo_012LzTopic楼主2024/6/19 19:45
#include<stdio.h>

int k1, k2, mean[155] = { 0 }, len[155] = { 0 },f=1;

struct ff
{
	int b[155];
}a[155];

struct tt
{
	int p;
	int q;
}ans[5005];

void DFS(int x)
{
	mean[x] = 1;
	for (int i = 1; i <= len[x]; i++)
	{
		if (mean[a[x].b[i]] == 1)continue;
		if (x == k1 && a[x].b[i] == k2)continue;
		if (a[x].b[i] == k2)
		{
			mean[x] = 0;
			f = 0;
			return;
		}
		DFS(a[x].b[i]);
	}
	mean[x] = 0;
	return;
}

int main()
{
	int n, m, x, y, ind = 0,t,s[5005],sum=0;
	scanf("%d%d", &n,&m);
	while (m--)
	{
		scanf("%d%d", &x, &y);
		if (x > y)
		{
			t = x;
			x = y;
			y = t;
		}
		a[x].b[++len[x]] = y;
		a[y].b[++len[y]] = x;
		ans[++ind].p = x;
		ans[ind].q = y;
	}
	for (int i = 1; i <= ind; i++)
	{
		k1 = ans[i].p;
		k2 = ans[i].q;
		DFS(k1);
		if (f)
		{
			s[++sum] = i;
		}
		else f = 1;
	}
	for (int i = 1; i < sum; i++)
	{
		int z = i;
		for (int j = i + 1; j <= sum; j++)
		{
			if (ans[s[z]].p > ans[s[j]].p)z = j;
			else if (ans[s[z]].p == ans[s[j]].p)
			{
				if (ans[s[z]].q > ans[s[j]].q)z = j;
			}
		}
		t = s[z];
		s[z] = s[i];
		s[i] = t;
	}
	for (int i = 1; i <= sum; i++)
	{
		printf("%d %d\n", ans[s[i]].p, ans[s[i]].q);
	}
	return 0;
}
2024/6/19 19:45
加载中...