第三个点WA了,求解
查看原帖
第三个点WA了,求解
853395
ZZzTTC楼主2024/12/8 22:29
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
const int N = 1e6 + 10;
int n, m, h[N], e[N], ne[N], idx;
bool st[N] = {false};
struct edge{
	int x, y;
};
edge edges[N];

bool compare(edge &a, edge &b){
	if(a.x == b.x) return a.y > b.y;
	return a.x > b.x;
}

void add(int a, int b){
	e[idx] = b;
	ne[idx] = h[a];
	h[a] = idx++;
}

void dfs(int x){
	printf("%d ", x);
	st[x] = true;
	for (int i = h[x]; ~i; i = ne[i]){
		if(!st[e[i]]) dfs(e[i]);
	}
}

void bfs(int x){
	queue<int> q;
	q.push(x);
	st[x] = true;
	while(q.size()){
		int t = q.front();
		q.pop();
		printf("%d ", t);
		for (int i = h[t]; !i; i = ne[i]){
			if(!st[e[i]]){
				st[e[i]] = true;
				q.push(e[i]);
			}
		}
	}
}

int main(){
	memset(h, -1, sizeof h);
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= m; i++) scanf("%d%d", &edges[i].x, &edges[i].y);
	sort(edges + 1, edges + 1 + m, compare);
	for (int i = 1; i <= m; i++) add(edges[i].x, edges[i].y);
	for (int i = 1; i <= n; i++){
		if(!st[i]) dfs(i);
	}
	printf("\n");
	memset(st, false, sizeof st);
	for (int i = 1; i <= n; i++){
		if(!st[i]) bfs(i);
	}
	return 0;
}
2024/12/8 22:29
加载中...