CF Destroying Roads (最短路)
2 seconds
256 megabytes
standard input
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.
The 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).
Print a single number — the answer to the problem. If the it is impossible to meet the conditions, print -1.
5 4
1 2
2 3
3 4
4 5
1 3 2
3 5 2
0
5 4
1 2
2 3
3 4
4 5
1 3 2
2 4 2
1
5 4
1 2
2 3
3 4
4 5
1 3 2
3 5 1
-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 (最短路)的更多相关文章
- Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路
题目链接: 题目 D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces 543B Destroying Roads(最短路)
题意: 给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2. Solution: 首先可以分两种情况讨论: 1: ...
- Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路 删边
题目:有n个城镇,m条边权为1的双向边让你破坏最多的道路,使得从s1到t1,从s2到t2的距离分别不超过d1和d2. #include <iostream> #include <cs ...
- Codeforces Round #302 (Div. 2) D - Destroying Roads 图论,最短路
D - Destroying Roads Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544 ...
- Codeforces 543.B Destroying Roads
B. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #302 (Div. 1) B - Destroying Roads
B - Destroying Roads 思路:这么菜的题我居然想了40分钟... n^2枚举两个交汇点,点与点之间肯定都跑最短路,取最小值. #include<bits/stdc++.h> ...
- [CF544D]Destroying Roads_最短路_bfs
D. Destroying Roads 题目大意: In some country there are exactly n cities and m bidirectional roads conne ...
- B. Destroying Roads
Destroying Roads 题目链接 题意 n个点,m条边每两个点之间不会有两个相同的边,然后给你两个起s1,s2和终点t1,t2; 求删除最多的边后满足两个s1到t1距离\(<=l1\) ...
- [CF544] D. Destroying Roads
D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
随机推荐
- [p2p]UDP用打洞技术穿透NAT的原理与实现
首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的, ...
- 支付宝修改回调地址后 issign=false
原因: verifyReturn 拼接url的时候,php自动添加了url参数,而url是本不需要的,所以导致md5对比出错. 修改 alipay_notify.class.php 77行的函数 ...
- ENTBOOST 2014.180L 发布,开源企业IM免费企业即时通讯
ENTBOOST,VERSION 2014.180 Linux版本发布,主要增加企业IM应用集成功能,完善安卓SDK功能及部分BUG修正: 7/1(明天)发布Windows版本,敬请关注! ENTBO ...
- Nazo解密游戏攻略
啊,终于腾出时间来玩这个游戏了,顺手写一下攻略吧…… 第0关:http://cafebabe.cc/nazo/ 第一关:第一关很简单 点一下就好了 http://cafebabe.cc/nazo/le ...
- NGINX源代码剖析 之 CPU绑定(CPU亲和性)
作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...
- SexyProgressBar
https://github.com/sunalong/SexyProgressBar
- HDU 4876 ZCC loves cards(暴力剪枝)
HDU 4876 ZCC loves cards 题目链接 题意:给定一些卡片,每一个卡片上有数字,如今选k个卡片,绕成一个环,每次能够再这个环上连续选1 - k张卡片,得到他们的异或和的数,给定一个 ...
- jquery.validate+jquery.form提交的三种方式
原文:http://www.cnblogs.com/datoubaba/archive/2012/06/06/2538873.html jquery.validate+jquery.form提交的三种 ...
- CENTOS YUM软件源
CentOS 7.0 使用 YUM 安装 MySQL 报错 问题现象 CentOS 7.0 使用 YUM 安装 MySQL 时出现类似如下错误信息: File contains no section ...
- MHA 安装过程 原创
root@monitor yum.repos.d]# cat CentOS-Base.repo [base]name=CentOS-$releasever - Basefailovermethod=p ...