要求加强数据
查看原帖
要求加强数据
576639
woshishabi11451444楼主2023/10/19 21:05

对于从 11 号点走到 s1s1 和 s2s2 号点,问最多可以删除多少个边,其实就是最短路变形,如果你不判其中有重边的话竟然有 5555 分。(树的点对了和后四个 点还有一点分)

#include<bits/stdc++.h>

using namespace std;

const int N = 3e3 + 5;

struct node{
	int x, cnt;
}stk[N];

vector<int> g[N];
int n, m, s1, t1, s2, t2, head, tail, vis[N];

void Record(int x, int cnt){
	if(vis[x]){
		return ;
	}
	vis[x] = 1;
	stk[++tail] = {x, cnt};
}

int BFS(int x, int c, int sx, int sy){
	fill(&vis[1], &vis[n] + 1, 0);
	head = 1, tail = 0;
	Record(x, c);
	while(head <= tail){
		node q = stk[head++];
		if(q.x == sx){
			return (q.cnt <= sy ? q.cnt : -1);
		}
		for(int i = 0; i < g[q.x].size(); i++){
			Record(g[q.x][i], q.cnt + 1);
		}
	}
	return -1;
}

int main(){
	cin >> n >> m;
	for(int i = 1, u, v; i <= m; i++){
		cin >> u >> v;
		g[v].push_back(u);
		g[u].push_back(v); 
	}
	cin >> s1 >> t1 >> s2 >> t2;
	int a = BFS(1, 0, s1, t1), b = BFS(1, 0, s2, t2);
	cout << (a == -1 || b == -1 ? -1 : (m * 2 - a - b - 1) / 2); 
	return 0;
}

@ 管理员加强数据。

2023/10/19 21:05
加载中...