20分求助
查看原帖
20分求助
571348
PartiallyCorrect楼主2024/8/27 13:04
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 3005;
vector<int> g[N];
int dis[N], dis1[N], dis2[N];
void dfs(int x, int fa, int *dis)
{
    for(auto y : g[x])
    {
        if(y == fa)continue;
        if(dis[y] > dis[x] + 1)
        {
            dis[y] = dis[x] + 1;
            dfs(y, x, dis);
        }
 
    }
}
signed main()
{
    int n, m;
    cin >> n >> m;
    int c = m;
    while(m --)
    {
        int x, y;
        cin >> x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    int s1, t1, s2, t2;
    cin >> s1 >> t1 >> s2 >> t2;
    memset(dis, 0x3f, sizeof dis);
    memset(dis1, 0x3f, sizeof dis1);
    memset(dis2, 0x3f, sizeof dis2);
    dis[1] = 0;
    dis1[s1] = 0;
    dis2[s2] = 0;   
    dfs(1, -1, dis);
    dfs(s1, -1, dis1);
    dfs(s2, -1, dis2);
    if(dis[s1] > t1 or dis[s2] > t2)
    {
        cout << -1;
        return 0;
    }
    int ans = 2e9;
    for(int i = 1 ; i <= n ; i ++)ans = min(ans, dis[i] + dis1[i] + dis2[i]);
    cout << c - ans;
	return 0;
}
2024/8/27 13:04
加载中...