题意:

  给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2。


Solution:

  首先可以分两种情况讨论:

    1:假设最后留下的边是互不相交的两条路径。此时的答案是n-s1到t1的最短路径-s2到t2的最短路径。

2:假设最后留下的边有重合的一段,此时只要枚举重合的这一段的起点和终点,就可以判断。注意此时要考虑这两条路径经过枚举的两点的顺序。

限制的条件比较多,可以用来剪枝的条件也很多。

由于所有边的长度为1,用DFS或者SPFA算法可以很快地求出最短路。

#include <bits/stdc++.h>
using namespace std; const int N = ; struct edge {
int v, ne;
} E[N * N << ];
int head[N], cnt; int n, m, ans;
int s1, s2, t1, t2, l1, l2; int dis[][N];
int vis[N]; void SPFA (int S, int k) {
queue<int> q;
memset (vis, , sizeof vis);
dis[k][S] = ;
vis[S] = ;
q.push (S);
while (!q.empty() ) {
int u = q.front(); q.pop();
for (int i = head[u]; i; i = E[i].ne) {
int v = E[i].v;
if (dis[k][u] + < dis[k][v]) {
dis[k][v] = dis[k][u] + ;
if (!vis[v]) {
vis[v] = ;
q.push (v);
}
}
}
vis[u] = ;
}
} inline void add (int u, int v) {
E[++cnt].v = v, E[cnt].ne = head[u];
head[u] = cnt;
} int main() {
ios::sync_with_stdio ();
cin >> n >> m;
for (int i = , u, v; i <= m; ++i) {
cin >> u >> v;
add (u, v), add (v, u);
}
cin >> s1 >> t1 >> l1;
cin >> s2 >> t2 >> l2;
memset (dis, 0x1f, sizeof dis);
SPFA (s1, );
SPFA (s2, );
SPFA (t1, );
SPFA (t2, );
if (dis[][t1] <= l1 && dis[][t2] <= l2) {
ans = dis[][t1] + dis[][t2];
for (int i = ; i <= n; ++i) {
int flag = ;
for (int k = ; k <= n; ++k) dis[][k] = ;
for (int j = i + ; j <= n; ++j) {
int tem1 = min (dis[][i] + dis[][j], dis[][j] + dis[][i]);
int tem2 = min (dis[][i] + dis[][j], dis[][j] + dis[][i]);
if (tem1 + tem2 < ans && tem1 < l1 && tem2 < l2) {
if (!flag) {
SPFA (i, );
flag = ;
}
if (tem1 + dis[][j] <= l1 && tem2 + dis[][j] <= l2) {
ans = min (ans, tem1 + tem2 + dis[][j]);
}
}
}
}
}
else {
ans = m + ;
}
cout << m - ans << endl;
}

Codeforces 543B Destroying Roads(最短路)的更多相关文章

  1. [CodeForces] 543B Destroying Roads

    脑洞+暴力. 因为边权是1,所以bfs一下,O(n^2)求任意两点间最短路,再枚举. ans最大是\(dis_{s1,t1}+dis_{s2,t2}\) 再考虑有公共边的情况,一定存在两个点 u, v ...

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

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

  3. CF Destroying Roads (最短路)

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

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

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

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

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

  6. Codeforces 543.B Destroying Roads

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

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

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

  8. [CF544D]Destroying Roads_最短路_bfs

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

  9. B. Destroying Roads

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

随机推荐

  1. php-Mysql示例1

  2. 使用Struts2开发Java Web应用程序(目录)

    连接地址 http://blog.csdn.net/struts2/article/details/1721752

  3. Delphi Web Service和ISAPI的区别与联系 转

    Web Service和ISAPI的区别与联系   1.Web Service 是一种新的web应用程序分支,他们是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.Web Service ...

  4. HDU 3480 Division(斜率优化+二维DP)

    Division Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 999999/400000 K (Java/Others) Tota ...

  5. zoj 3757 Alice and Bob and Cue Sports 月赛A 模拟

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3757 题意:根据所给的台球规则,按照每次的结果计算最终两人的得分 ...

  6. [转载]opencv MSER

    最大稳定极值区域(MSER-Maximally Stable Extremal Regions)可以用于图像的斑点区域检测.该算法最早是由Matas等人于2002年提出,它是基于分水岭的概念. MSE ...

  7. poj 1564 Sum It Up【dfs+去重】

    Sum It Up Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6682   Accepted: 3475 Descrip ...

  8. Apple Pay强势来袭,开发者应做的事情

    "iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...

  9. 355. Design Twitter

    二刷尝试了别的办法,用MAP代表关注列表. 然后不初始化,但是只要有用户被使用,而他又不在MAP里,就把他加进去,然后让他关注自己.. 但是这样做超时了. 问题在于这个题解法太多,有很多不同的情况. ...

  10. Maven 私服配置 转

    1.配置Nexus为maven的私服 第一种方式:在项目的POM中如下配置 <repositories>     <repository>         <id> ...