Codeforces 543B Destroying Roads(最短路)
题意:
给定一个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(最短路)的更多相关文章
- [CodeForces] 543B Destroying Roads
脑洞+暴力. 因为边权是1,所以bfs一下,O(n^2)求任意两点间最短路,再枚举. ans最大是\(dis_{s1,t1}+dis_{s2,t2}\) 再考虑有公共边的情况,一定存在两个点 u, v ...
- Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路
题目链接: 题目 D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input ...
- CF Destroying Roads (最短路)
Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 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\) ...
随机推荐
- 【转】patch命令
原文网址:http://bbs.chinaunix.net/thread-1945698-1-1.html patch给文件1应用补丁文件变成另外一个文件2(需要先用"diff 文件1 文件 ...
- rspec学习02
元数据 RSpec-core存储元数据哈希每实例和组,其中包含他们的描述,声明的位置等等,这个hash控制很多RSpec核心的功能,包括输出格式化程序(访问描述和位置),和before,after钩子 ...
- Unity Flow distort of screen
Shader "ScreenWater" {Properties { _MainTex ("Base (RGB)", 2D) = "white&quo ...
- HTML---网页编程(2)
前言 接着前面的HTML-网络编程1)来学习吧~~~ 色彩的表示 在计算机显示器中,使用红(red).绿(green).蓝(blue)3种颜色来构成各种各样的颜色.颜色的种类有16,256及65536 ...
- vijosP1067Warcraft III 守望者的烦恼
vijosP1067Warcraft III 守望者的烦恼 链接:https://vijos.org/p/1067 [思路] 矩阵乘法. 可以得出递推式: f[i]=sum{ f[n-1], ...
- mysql使用mysqldump导出数据出错
mysqldump -hlocalhost -uroot -p123456 student_info jssypk > c:/databackup.sql 导出表结构 mysqldump - ...
- 406. Queue Reconstruction by Height
一开始backtrack,设计了很多剪枝情况,还是TLE了 ..后来用PQ做的. 其实上面DFS做到一半的时候意识到应该用PQ做,但是不确定会不会TLE,就继续了,然后果然TLE了.. PQ的做法和剪 ...
- C#执行带参数的Oracle存储过程
public void UpdateByRowGuid(string RowGuid) { //OracleConnection conn = new OracleConnection("d ...
- iOS开发总结-UIWebView 集成 浏览器
// // detailWebViewController.m // BJ // // Created by shirenfeng on 16/11/6. // Copyright © 2016年 c ...
- [Javascript] Using JSHint for Linting with Gulp
gulpfile.js var gulp = require('gulp'); var jshint = require('gulp-jshint'); var stylish = require(' ...