能不能帮忙给个hack
查看原帖
能不能帮忙给个hack
326254
LonginusMonkey楼主2024/11/24 21:23
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int maxn = 300000 + 100;
vector<int> vec[maxn];
int dis[maxn], dis2[maxn], vis[maxn];

signed main() {
	ios::sync_with_stdio(0); cin.tie(0);
	int n, m; cin >> n >> m;
	for(int i=1; i<=m; ++i) {
		int a, b; cin >> a >> b;
		vec[a].push_back(b);
		vec[b].push_back(a);
	}
	for(int i=0; i<=n; ++i) {
		dis[i] = 1e16;
	}
	queue<int> que;
	que.push(1);
	vis[1] = 1;
	dis[1] = 0;
	while(!que.empty()) {
		int now = que.front(); que.pop();
		for(int i=0; i<vec[now].size(); ++i) {
			int to = vec[now][i];
			if(!vis[to]) {
				que.push(to);
				vis[to] = 1;
				dis[to] = dis[now] + 1; 
			}
		}
	}
	while(!que.empty()) {
		que.pop();
	}
	for(int i=0; i<=n; ++i) {
		dis2[i] = 1e16;
	}
	que.push(n);
	vis[n] = 1;
	dis2[n] = 0;
	while(!que.empty()) {
		int now = que.front(); que.pop();
		for(int i=0; i<vec[now].size(); ++i) {
			int to = vec[now][i];
			if(!vis[to]) {
				que.push(to);
				vis[to] = 1;
				dis2[to] = dis2[now] + 1; 
			}
		}
	}
	for(int i=1; i<=n; ++i) {
		if(min(dis[0], dis[i]) + min(dis2[0], dis2[i]) <= dis[n]) {
			if(min(dis[0], dis[i]) + min(dis2[0], dis2[i]) >= 1e16) cout << -1 << " ";
			else cout << min(dis[0], dis[i]) + min(dis2[0], dis2[i]) << " ";
		} else {
			if(dis[n] >= 1e16) cout << -1 << " ";
			else cout << dis[n] << " ";
		}
	}
	return 0;
}
2024/11/24 21:23
加载中...