1. 程式人生 > 其它 >P5683 [CSP-J2019 江西] 道路拆除

P5683 [CSP-J2019 江西] 道路拆除

很明顯這兩條路徑會有一部分重合然後分歧。我們可以列舉分歧點。

#include<bits/stdc++.h>
using namespace std;
const int maxn=3e3+5;
int dis[maxn][3];
#define MP make_pair
vector<int> e[maxn];
int n,m,s1,t1,s2,t2,M=-1;
void dijk(int s,int k){
	priority_queue<pair<int,int> > q;
	for(int i=1;i<=n;i++)dis[i][k]=0x3f3f3f3f;
	dis[s][k]=0;
	q.push(MP(0,s));
	while(!q.empty()){
		int d=q.top().first,u=q.top().second;
		q.pop();
		if(-d!=dis[u][k])continue;
		for(auto v:e[u]){
			if(dis[v][k]>dis[u][k]+1){
				dis[v][k]=dis[u][k]+1;
				q.push(MP(-dis[v][k],v));
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		e[x].push_back(y);
		e[y].push_back(x);
	}cin>>s1>>t1>>s2>>t2;
	dijk(1,0);dijk(s1,1);dijk(s2,2);
	for(int i=1;i<=n;i++){
		int ans=m-(dis[i][0]+dis[i][1]+dis[i][2]);
		if(dis[i][0]+dis[i][1]<=t1&&dis[i][0]+dis[i][2]<=t2)M=max(M,ans);
	} 
	cout<<M;
	return 0;
} 
YJX AK IOI