51nod 1444 破壞道路 最短路

2021-08-08 10:50:27 字數 1183 閱讀 1541

思路

因為邊的權為1,所以可以bfs在o(n^2) 時間內求出任意兩點間的最短距離,

那麼d[s1][i]+d[i][j]+d[j][t1] <=lim1 說明i->j 為符合條件的s1->t1的子路。

如果d[s1][i]+d[i][j]+d[j][t1] <=lim1 &&d[s2][i]+d[i][j]+d[j][t2] <=lim2 那麼可以更新答案。當d[s1][i]+d[i][j]+d[j][t1] <=lim1 &&d[s2][j]+d[j][i]+d[i][t2] <=lim2 也可以更新,因為不確定i,j連線的是哪頭。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int inf = ( 2e9 )/2 + 2;

const

int maxn = 3010;

const

int maxm = 6010;

struct edge

e[maxm];

int head[maxn];

int tot,fl,fll;

int vis[maxn],d[maxn][maxn];

int dp[maxn],mark[maxn];

int s1,t1,l1,s2,t2,l2;

int n,m;

void add(int u,int v)

void bfs(int s,int *d)}}

}int solve()

if(d[s1][i]+d[i][j]+d[j][t1]<=l1&&d[s2][j]+d[j][i]+d[i][t2]<=l2)

}return m-ans;

}int main()

scanf("%d%d%d%d%d%d",&s1,&t1,&l1,&s2,&t2,&l2);

printf("%d\n",solve());

}

51nod1444 破壞道路

1444 破壞道路 codeforces 基準時間限制 1.5 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 在某乙個國家,那兒有n個城市,他們通過m條雙向道路相連。城市從1到n編號。如果城市a和b通過一條道路直接相連,那麼他們之間的距離就是乙個小時。這個國家的道路網路可以允許你...

51nod 1444 破壞道路

在某乙個國家,那兒有n個城市,他們通過m條雙向道路相連。城市從1到n編號。如果城市a和b通過一條道路直接相連,那麼他們之間的距離就是乙個小時。這個國家的道路網路可以允許你從任意乙個城市到達另外的城市。現在你要破壞盡可能多的道路,但是要保證從城市s1到t1不超過l1小時,並且從城市s2到t2不超過l2...

51nod 1444 破壞道路

在某乙個國家,那兒有n個城市,他們通過m條雙向道路相連。城市從1到n編號。如果城市a和b通過一條道路直接相連,那麼他們之間的距離就是乙個小時。這個國家的道路網路可以允許你從任意乙個城市到達另外的城市。現在你要破壞盡可能多的道路,但是要保證從城市s1到t1不超過l1小時,並且從城市s2到t2不超過l2...