思路
因為邊的權為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...