关于本题数据
查看原帖
关于本题数据
735713
Azure_F楼主2023/10/18 21:14

如下代码连样例都无法通过,却能 AC:

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>

const int N = 3e4 + 5;
int n, m, s1, s2, t1, t2;
std::vector<int> g[N];
int dis_A[N], dis_s1[N], dis_s2[N];

void bfs(int x, int dis[]){
	memset(dis, 0x3f, sizeof dis_A);
	dis[x] = 0;
	std::queue<int> q;
	q.push(x);
	while(!q.empty()){
		int u = q.front(); q.pop();
		for(int i = 0; i < g[u].size(); ++i){
			int v = g[u][i];
			if(dis[v] == 0x3f3f3f3f){
				dis[v] = dis[u] + 1; 
				q.push(v);
			}
		}
	}
}

int main(){
//	freopen("road.in", "r", stdin);
//	freopen("road.out", "w", stdout);
	
	std::ios::sync_with_stdio(false);
	std::cin.tie(0); std::cout.tie(0);
	std::cin >> n >> m;
	for(int i = 1; i <= m; ++i){
		int x, y;
		std::cin >> x >> y;
		g[x].push_back(y);
		g[y].push_back(x);
	}
	std::cin >> s1 >> t1 >> s2 >> t2;
	bfs(1, dis_A); bfs(s1, dis_s1); bfs(s2, dis_s2);
	int ans = m + 1;
	for(int i = 1; i <= n; ++i){
		if(dis_A[i] + dis_s1[i] <= t1 && dis_A[i] + dis_s1[i] <= t2)
			ans = std::min(ans, dis_A[i] + dis_s1[i] + dis_s2[i]);
	}
	std::cout << m - ans;
	
	return 0;
}
2023/10/18 21:14
加载中...