Destroying Roads
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

In 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.

Input

The first line contains two integers nm (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 aibi (1 ≤ ai, bi ≤ nai ≠ 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).

Output

Print a single number — the answer to the problem. If the it is impossible to meet the conditions, print -1.

Sample test(s)
input
5 4
1 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

用dijkstra把每个点都跑一遍,求出任意点之间的最短路,然后先假设两条路之间没重叠,那么可以拆的路就是M - 最短路a - 最短路b,再假设有重叠,枚举他们重叠的段。要注意有可能出现起点和终点要互换的情况。
 #include <bits/stdc++.h>
using namespace std; const int INF = 0xfffffff;
const int SIZE = ;
int N,M,D[SIZE][SIZE];
int s_1,t_1,l_1,s_2,t_2,l_2;
bool S[SIZE];
struct Q_Node
{
int d,vec;
bool operator <(const Q_Node & r) const
{
return d > r.d;
};
};
vector<int> G[SIZE]; void dijkstra(int);
int main(void)
{
int from,to; scanf("%d%d",&N,&M);
for(int i = ;i < M;i ++)
{
scanf("%d%d",&from,&to);
G[from].push_back(to);
G[to].push_back(from);
}
for(int i = ;i <= N;i ++)
dijkstra(i); scanf("%d%d%d",&s_1,&t_1,&l_1);
scanf("%d%d%d",&s_2,&t_2,&l_2);
if(D[s_1][t_1] > l_1 || D[s_2][t_2] > l_2)
{
puts("-1");
return ;
} int min = D[s_1][t_1] + D[s_2][t_2];
int ans = ;
for(int i = ;i <= N;i ++)
for(int j = ;j <= N;j ++)
{
if(min > D[s_1][i] + D[s_2][i] + D[i][j] + D[j][t_1] + D[j][t_2])
if(D[s_1][i] + D[i][j] + D[j][t_1] <= l_1 &&
D[s_2][i] + D[i][j] + D[j][t_2] <= l_2)
min = D[s_1][i] + D[s_2][i] + D[i][j] + D[j][t_1] + D[j][t_2];
if(min > D[t_1][i] + D[t_2][i] + D[i][j] + D[j][s_1] + D[j][s_2])
if(D[t_1][i] + D[i][j] + D[j][s_1] <= l_1 &&
D[t_2][i] + D[i][j] + D[j][s_2] <= l_2)
min = D[t_1][i] + D[t_2][i] + D[i][j] + D[j][s_1] + D[j][s_2];
if(min > D[t_1][i] + D[s_2][i] + D[i][j] + D[j][s_1] + D[j][t_2])
if(D[t_1][i] + D[i][j] + D[j][s_1] <= l_1 &&
D[s_2][i] + D[i][j] + D[j][t_2] <= l_2)
min = D[t_1][i] + D[s_2][i] + D[i][j] + D[j][s_1] + D[j][t_2];
if(min > D[s_1][i] + D[t_2][i] + D[i][j] + D[j][t_1] + D[j][s_2])
if(D[s_1][i] + D[i][j] + D[j][t_1] <= l_1 &&
D[t_2][i] + D[i][j] + D[j][s_2] <= l_2)
min = D[s_1][i] + D[t_2][i] + D[i][j] + D[j][t_1] + D[j][s_2];
}
printf("%d\n",M - min); return ;
} void dijkstra(int s)
{
priority_queue<Q_Node> que;
Q_Node temp;
for(int i = ;i <= N;i ++)
{
D[s][i] = INF;
S[i] = false;
}
D[s][s] = ;
temp.d = ;
temp.vec = s;
que.push(temp); while(!que.empty())
{
int cur = que.top().vec;
que.pop();
S[cur] = true; for(int i = ;i < G[cur].size();i ++)
if(!S[G[cur][i]] && D[s][G[cur][i]] > D[s][cur] + )
{
D[s][G[cur][i]] = D[s][cur] + ;
temp.vec = G[cur][i];
temp.d = D[s][G[cur][i]];
que.push(temp);
}
}
}

CF Destroying Roads (最短路)的更多相关文章

  1. Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路

    题目链接: 题目 D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input ...

  2. Codeforces 543B Destroying Roads(最短路)

    题意: 给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2. Solution: 首先可以分两种情况讨论: 1: ...

  3. Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路 删边

    题目:有n个城镇,m条边权为1的双向边让你破坏最多的道路,使得从s1到t1,从s2到t2的距离分别不超过d1和d2. #include <iostream> #include <cs ...

  4. Codeforces Round #302 (Div. 2) D - Destroying Roads 图论,最短路

    D - Destroying Roads Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544 ...

  5. Codeforces 543.B Destroying Roads

    B. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. Codeforces Round #302 (Div. 1) B - Destroying Roads

    B - Destroying Roads 思路:这么菜的题我居然想了40分钟... n^2枚举两个交汇点,点与点之间肯定都跑最短路,取最小值. #include<bits/stdc++.h> ...

  7. [CF544D]Destroying Roads_最短路_bfs

    D. Destroying Roads 题目大意: In some country there are exactly n cities and m bidirectional roads conne ...

  8. B. Destroying Roads

    Destroying Roads 题目链接 题意 n个点,m条边每两个点之间不会有两个相同的边,然后给你两个起s1,s2和终点t1,t2; 求删除最多的边后满足两个s1到t1距离\(<=l1\) ...

  9. [CF544] D. Destroying Roads

    D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. UI:自定义键盘的实现

    自定义我的封装键盘,并在试图控制器里对接 (解决多 输入框问题,把输入框存入到可变数组) @implementation AppDelegate - (BOOL)application:(UIAppl ...

  2. NBearV3中文教程总目录

    1.NBearV3 Step by Step教程——ORM篇 摘要:本教程演示如何基于NBearV3的ORM模块开发一个Web应用程序的全过程.本教程演示的实体关系包括:继承.1对1关联.1对多关联, ...

  3. Ehcache(09)——缓存Web页面

    http://haohaoxuexi.iteye.com/blog/2121782 页面缓存 目录 1       SimplePageCachingFilter 1.1      calculate ...

  4. 利用FlashPaper实现类似百度文库功能

    最近需要实现一个类似百度文库的功能,在Google上淘了一段时间,发现FlashPaper还算能够不错的实现此需求. 首先讲下思路: 1>安装FlashPaper: 2>利用java代码将 ...

  5. IC开短路测试(open_short_test),编程器测试接触不良、开短路

    http://kitebee.meibu.com/forum.php?mod=viewthread&tid=69654&extra=page%3D5 IC开短路测试(open_shor ...

  6. web及移动应用测试知识总结

    发现自己对测试知识的掌握不够系统,在这里整理一下好了. 1. 通用测试点 功能测试 正向:输入一个有效的输入并且期望软件能够完成一些根据说明书规定的行为 逆向:输入一个无效的输入并且期望软件给出合理的 ...

  7. javascript 操作 excel 全攻略

    最近做一个项目,用到了javascript操纵excel以生成报表,下面是标有详细注解的实例 <html> <head><script language="ja ...

  8. Codeforces Round #336 (Div. 2)B. Hamming Distance Sum 前缀和

    B. Hamming Distance Sum 题目连接: http://www.codeforces.com/contest/608/problem/A Description Genos need ...

  9. HDU 4278 Faulty Odometer 8进制转10进制

    Faulty Odometer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  10. impdp的一些实际问题解决方法

    之前在http://blog.csdn.net/bisal/article/details/19067515写过一篇关于expdp和impdp的实践的帖子.今天碰到个问题,有些内容没有介绍全,这里再补 ...