[CodeForces] 543B Destroying Roads
脑洞+暴力。
因为边权是1,所以bfs一下,O(n^2)求任意两点间最短路,再枚举。
ans最大是\(dis_{s1,t1}+dis_{s2,t2}\)
再考虑有公共边的情况,一定存在两个点 u, v ,最后留下的边为(s1,u),(s2,u),(u,v),(v,t1),(v,t2)或是 (s1,u),(t2,u),(u,v),(v,t1),(v,s2) 五组点之间最短路。
如图:

因此代码如下。
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
int n,m;
const int N=3005;
int dis[N][N],s1,s2,t1,t2,l1,l2,ans=0x3f3f3f3f,ecnt,head[N];
bool vis[N];
struct Edge{
int to,nxt;
}e[N*N<<1];
void add(int bg,int ed){
e[++ecnt].nxt=head[bg];
e[ecnt].to=ed;
head[bg]=ecnt;
}
void bfs(int x) {
dis[x][x]=0;
memset(vis,0,sizeof vis);
queue<int>q;
q.push(x);vis[x]=1;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head[u];i;i=e[i].nxt) {
int v=e[i].to;
if(dis[x][v]>dis[x][u]+1) {
dis[x][v]=dis[x][u]+1;
if(!vis[v]) q.push(v),vis[v]=1;
}
}
}
}
int main() {
scanf("%d%d",&n,&m);
int a,b,tp=m;
memset(dis,0x3f,sizeof dis);
while(m--) {
scanf("%d%d",&a,&b);add(a,b);add(b,a);
}
scanf("%d%d%d%d%d%d",&s1,&t1,&l1,&s2,&t2,&l2);
for(int i=1;i<=n;i++) bfs(i);
if(dis[s1][t1]>l1||dis[s2][t2]>l2) {puts("-1");return 0;}
ans=dis[s1][t1]+dis[s2][t2];
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(dis[s1][i]+dis[j][t1]+dis[i][j]<=l1&&dis[i][j]+dis[j][t2]+dis[s2][i]<=l2&&dis[s1][i]+dis[j][t1]+dis[i][j]>=0&&dis[i][j]+dis[j][t2]+dis[s2][i]>=0)
ans=min(ans,dis[s1][i]+dis[s2][i]+dis[i][j]+dis[j][t1]+dis[j][t2]);
if(dis[s1][i]+dis[i][j]+dis[j][t1]<=l1&&dis[i][j]+dis[t2][i]+dis[j][s2]<=l2&&dis[s1][i]+dis[i][j]+dis[j][t1]>=0&&dis[i][j]+dis[t2][i]+dis[j][s2]<=l2>=0)
ans=min(ans,dis[s1][i]+dis[t2][i]+dis[i][j]+dis[j][t1]+dis[j][s2]);
}
}
cout<<tp-ans;
}
[CodeForces] 543B Destroying Roads的更多相关文章
- Codeforces 543B Destroying Roads(最短路)
题意: 给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2. Solution: 首先可以分两种情况讨论: 1: ...
- 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 Round #302 (Div. 2) D. Destroying Roads 最短路
题目链接: 题目 D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input ...
- 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> ...
- CF Destroying Roads (最短路)
Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Codeforces 835 F. Roads in the Kingdom
\(>Codeforces\space835 F. Roads in the Kingdom<\) 题目大意 : 给你一棵 \(n\) 个点构成的树基环树,你需要删掉一条环边,使其变成一颗 ...
- [CF544] D. Destroying Roads
D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- B. Destroying Roads
Destroying Roads 题目链接 题意 n个点,m条边每两个点之间不会有两个相同的边,然后给你两个起s1,s2和终点t1,t2; 求删除最多的边后满足两个s1到t1距离\(<=l1\) ...
随机推荐
- 训练1-N
给出N个整数,对着N个整数进行排序 Input 第1行:整数的数量N(1 <= N <= 50000)第2 - N + 1行:待排序的整数(-10^9 <= Ai <= 10^ ...
- YII实现dropDownList 联动事件
因功能需求,需要用到联动,特此记录分享 一.视图中 <div class="main-form"> <?php $form = ActiveForm::begin ...
- nginx反向代理时保持长连接
·[场景描述] HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟. 如果我们使用了nginx去作为 ...
- js实现本地的图片压缩上传预览
js在设计时考虑到安全的原因是不允许读写本地文件的,随着html5的出现提供了fileReader AP从而可以I实现本地图片的读取预览功能, 另外在移动端有的限制图片大小的需求,主要是考虑图片过大会 ...
- 查看eclipse的安装路径
在桌面上快捷方式右键 点击属性 起始位置便是.
- JAVA基础总结【面试】
前言 近间陆续面试了不少的求职的前(JAVA).后(WEB)端开发人员,包括实习生.应届毕业生.一两年工作经验的.也有三四年工作经验的,也算见过了比较多的开发人员,想在这里做个总结,本次主要讲一讲面试 ...
- dtd对xml没有起到约束作用
问题如题. dtd: xml: BUG很明显,但是xml并没有提示错误信息.xml文档校验设置正常. 此处原因: dtd中元素与子元素设置之间缺少空格: 加上空格后正常报错:
- 【C/C++多线程编程之十】pthread线程私有数据
多线程编程之线程私有数据 Pthread是 POSIX threads 的简称.是POSIX的线程标准. 线程同步从相互排斥量[C/C++多线程编程之六]pthread相互排 ...
- Android 四大组件学习之ContentProvider三
上节课学习怎样自己创建一个ContentProvider.以及用ContentResolver去操作ContentProvider. 今天我们用系统提供的ContentProvider. 先来个简单的 ...
- 通过Gulp流方式处理流程
http://www.cnblogs.com/gongcheng9990/archive/2014/11/25/4120434.html http://modernweb.com/2014/08/04 ...