企鹅给我出来!把我的CF1761E代码搞WA了,还不快过来帮我调!
  • 板块灌水区
  • 楼主copper_ingot
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/5 16:12
  • 上次更新2024/8/5 16:58:06
查看原帖
企鹅给我出来!把我的CF1761E代码搞WA了,还不快过来帮我调!
538209
copper_ingot楼主2024/8/5 16:12

WA on #4

#include <bits/stdc++.h>
using namespace std;
#define int long long
int t, n, fa[5001], siz[5001], edg[5001], cnt, num[5001];
char mychar(){
	char c = getchar();
	while (c == ' ' || c == '\n' || c == '\r' || c == '\t') c = getchar();
	return c;
}
int find(int u){if (fa[u] == u) return u; return fa[u] = find(fa[u]);}
signed main(){
	scanf("%lld", &t);
	while (t--){
		scanf("%lld", &n); cnt = 0;
		for (int i = 1; i <= n; i++) fa[i] = i, siz[i] = 1, edg[i] = num[i] = 0;
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= n; j++)
				if (mychar() == '1'){
					num[i]++;
					int fi = find(i), fj = find(j);
					if (fi != fj){
						fa[fj] = fi;
						siz[fi] += siz[fj], siz[fj] = 0;
					}
				}
		int flag = 1;
		for (int i = 1; i <= n; i++){
			if (siz[i] == n){puts("0"); flag = 0; break;}
			else if (siz[i] == 1){
				printf("1\n%lld\n", i);
				flag = 0; break;
			}
			else if (siz[i]) cnt++;
		}
		if (!flag) continue;
		for (int i = 1; i <= n; i++) edg[i] = siz[i] * (siz[i] - 1);
		for (int i = 1; i <= n; i++){
			int fi = find(i);
			if (num[i] * siz[fi] < edg[fi]){
				printf("1\n%lld\n", i);
				flag = 0; break;
			}
		}
		if (!flag) continue;
		if (cnt > 2){
			printf("2\n1 ");
			for (int i = 2; i <= n; i++) if (fa[i] != fa[1]){printf("%lld\n", i); break;}
		}
		else{
			int mins = 100001, minid = 0;
			for (int i = 1; i <= n; i++)
				if (siz[i] < mins && siz[i]) mins = siz[i], minid = i;
			printf("%lld\n", mins);
			for (int i = 1; i <= n; i++)
				if (fa[i] == minid) printf("%lld ", i);
			puts("");
		}
	}
	return 0;
}
2024/8/5 16:12
加载中...