9分求助!
  • 板块灌水区
  • 楼主_Dreams_
  • 当前回复0
  • 已保存回复1
  • 发布时间2024/8/23 11:53
  • 上次更新2024/8/23 14:48:34
查看原帖
9分求助!
941614
_Dreams_楼主2024/8/23 11:53

这里

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 2e2 + 10;
int g[N][N];
int d[N];//记录像谁拿光盘
int n, cont = 0;

void floyd() {
	for (int k = 1; k <= n; k++) {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				g[i][j] = g[i][j] || g[i][k] && g[k][j];
			}
		}
	}
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int tmp;
		cin >> tmp;
		while (tmp != 0) {
			g[i][tmp] = 1;
			cin >> tmp;
		}
	}
	floyd();//所有的边都维护完成
	//输出g
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (g[i][j] == 1) {
				d[j] = d[i];
			}
		}
	}
	sort(d + 1, d + n + 1);
	int disk = -1;
	for (int i = 1; i <= n; i++) {
		if (disk != d[i]) {
			disk = d[i];
			cont++;
		}
	}
	cout << cont;
	return 0;
}

help!!!!!!!!!!!!!!!!!!!!!!!!

2024/8/23 11:53
加载中...