P5683 [CSP-J2019 江西] 道路拆除
阿新 • • 發佈:2021-10-15
很明顯這兩條路徑會有一部分重合然後分歧。我們可以列舉分歧點。
YJX AK IOI#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; }