Codeforces 543 B. World Tour
http://codeforces.com/problemset/problem/543/B
?
題意:
給定一張邊權(quán)均為1的無向圖。 問至多可以刪除多少邊,使得s1到t1的最短路不超過l1,s2到t2的最短路不超過l2。 轉(zhuǎn)化成至少保留多少條邊 若兩條路徑?jīng)]有沒有交集,就是dis[a1][b1]+dis[a2][b2] 如果兩條路徑有交集,交集一定是連續(xù)的一段,枚舉交集的起點和終點即可 注意s1向t1方向可能對應(yīng)著s2向t2方向,也可能對應(yīng)著t2向s2方向 所以要交換s1 t1 求兩遍?
#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>using namespace std;#define N 3001int dis[N][N];int s1,t1,s2,t2,l1,l2;int n;int tot; int front[N],to[N*N],nxt[N*N];int mi;void read(int &x) {x=0; char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } }void add(int u,int v) {to[++tot]=v; nxt[tot]=front[u]; front[u]=tot;to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; }void bfs(int s) {int now,t;static queue<int>q;q.push(s);while(!q.empty()){now=q.front();q.pop();for(int i=front[now];i;i=nxt[i]){t=to[i];if(dis[s][t]==-1) {dis[s][t]=dis[s][now]+1;q.push(t);}}} }void solve() {for(int i=1;i<=n;++i)for(int j=1;j<=n;++j){if(dis[s1][i]+dis[i][j]+dis[j][t1]>l1 || dis[s2][i]+dis[i][j]+dis[j][t2]>l2) continue;mi=min(mi,dis[s1][i]+dis[j][t1]+dis[s2][i]+dis[j][t2]+dis[i][j]);} }int main() {int m;read(n); read(m);int u,v;for(int i=1;i<=m;++i){read(u); read(v);add(u,v);}memset(dis,-1,sizeof(dis));for(int i=1;i<=n;++i) dis[i][i]=0;for(int i=1;i<=n;++i) bfs(i);read(s1); read(t1); read(l1);read(s2); read(t2); read(l2);if(dis[s1][t1]>l1 || dis[s2][t2]>l2){printf("-1");return 0;}mi=dis[s1][t1]+dis[s2][t2];solve();swap(s1,t1);solve();printf("%d",m-mi); }?
B. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard outputIn some country there are exactly?n?cities and?m?bidirectional roads connecting the cities. Cities are numbered with integers from?1?to?n. If cities?a?and?b?are connected by a road, then in an hour you can go along this road either from city?a?to city?b, or from city?b?to city?a. The road network is such that from any city you can get to any other one by moving along the roads.
You want to destroy the largest possible number of roads in the country so that the remaining roads would allow you to get from city?s1?to city?t1?in at most?l1?hours and get from city?s2?to city?t2?in at most?l2?hours.
Determine what maximum number of roads you need to destroy in order to meet the condition of your plan. If it is impossible to reach the desired result, print -1.
InputThe first line contains two integers?n,?m?(1?≤?n?≤?3000,?)?— the number of cities and roads in the country, respectively.
Next?m?lines contain the descriptions of the roads as pairs of integers?ai,?bi?(1?≤?ai,?bi?≤?n,?ai?≠?bi). It is guaranteed that the roads that are given in the description can transport you from any city to any other one. It is guaranteed that each pair of cities has at most one road between them.
The last two lines contains three integers each,?s1,?t1,?l1?and?s2,?t2,?l2, respectively (1?≤?si,?ti?≤?n,?0?≤?li?≤?n).
OutputPrint a single number — the answer to the problem. If the it is impossible to meet the conditions, print -1.
Examples input 5 41 2
2 3
3 4
4 5
1 3 2
3 5 2 output 0 input 5 4
1 2
2 3
3 4
4 5
1 3 2
2 4 2 output 1 input 5 4
1 2
2 3
3 4
4 5
1 3 2
3 5 1 output -1
轉(zhuǎn)載于:https://www.cnblogs.com/TheRoadToTheGold/p/8419246.html
總結(jié)
以上是生活随笔為你收集整理的Codeforces 543 B. World Tour的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三章 深入分析Java Web中的中
- 下一篇: iOS - UIEvent事件及UIRe