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. 使用java发送邮件sp自动发送邮件方法

    注意:将jar包复制到web-info文件夹下lib: activation.jar mail.jar //发送邮箱 public static String sendEmail(String sen ...

  2. Minus-C 一个最小化的C语言规范

    资深C++程序员都不会对C++编程规范太陌生,C++实在太复杂,以至于所有项目都需要裁剪一个子集共项目组内使用.经过在家休息这一小段时间,我发现其实C语言更需要一个相同的规范,这就是本文的目标,最大可 ...

  3. Linux编译安装RTL8192CU芯片驱动,使用TP_LINK wn823n无线网卡

    前几天给自己的台式电脑安装了Window 7+CentOS 6.4 Linux双系统,发现在Windows 7下面可以正常使用TP_LINK wn823n无线网卡来连接无线网络,但是在Linux下面, ...

  4. oracle:自定义多行合并聚合函数

    原始表 COUNTRY CITY            -------------------- -------------- 中国 台北              中国 香港             ...

  5. Mathematics for Computer Graphics数学在计算机图形学中的应用 [转]

    最近严重感觉到数学知识的不足! http://bbs.gameres.com/showthread.asp?threadid=10509 [译]Mathematics for Computer Gra ...

  6. HTTP(一) 连接管理

    ・HTTP是如何使用TCP连接的 HTTP传送一条报文时,以流的形式将报文数据内容通过一条打开的TCP连接按序传输. TCP收到数据流之后,由TCP/IP软件将数据流砍成被称作段的小数据块,并将段封装 ...

  7. 系列文章--SharePoint 开发教程

    SharePoint 2013 图文开发系列之入门教程 学习地址:http://www.cnblogs.com/jianyus/p/3461719.html 里面有2007.2010.2013各个版本 ...

  8. Vehicle’s communication protocol

    http://www.crecorder.com/techInfo/commuProtocols.jsp COMMUNICATION PROTOCOLS A “communication protoc ...

  9. 解决IE6不支持position:fixed属性

    最近在优化网站浮动广告时候遇见了IE6不支持position:fixed属性.上网收集了一下解决方案 比较好的方案就是利用css表达式进行解决 补充:CSS Expression (CSS 表达式), ...

  10. 测试HAPROXY的文件分流办法

    测试HAPROXY的文件分流办法 http://blog.chinaunix.net/uid-20553497-id-3054980.html http://blog.sina.com.cn/s/bl ...