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

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf =0x7f7f7f7f;
const double pi=acos(-1);
const int maxn=3000; vector<int> G[maxn+5];
int n,m,used[maxn+10],dist[maxn+10][maxn+10],vis[maxn+10]; void bfs(int s)
{
MM(used,0);
MM(vis,0);
fill(dist[s]+1,dist[s]+n+1,inf); queue<int> q;
q.push(s);
dist[s][s]=0;
used[s]=1;
vis[s]=1; while(q.size())
{
int u=q.front();q.pop();
used[u]=1;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(used[v]) continue;
dist[s][v]=min(dist[s][v],dist[s][u]+1);
if(!vis[v]) {q.push(v);vis[v]=1;}
}
}
} int main()
{
while(~scanf("%d %d",&n,&m))
{
for(int i=1;i<=n;i++) G[i].clear();
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d %d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
} int s1,t1,l1,s2,t2,l2;
scanf("%d %d %d %d %d %d",&s1,&t1,&l1,&s2,&t2,&l2);
for(int i=1;i<=n;i++)
bfs(i); if(dist[s1][t1]>l1||dist[s2][t2]>l2)
{
printf("-1\n");
continue;
} int ans=dist[s1][t1]+dist[s2][t2];
for(int u=1;u<=n;u++)
for(int v=1;v<=n;v++)
{
if(dist[s1][u]+dist[u][v]+dist[v][t1]<=l1&&dist[s2][u]+dist[u][v]+dist[v][t2]<=l2)
ans=min(ans,dist[s1][u]+dist[u][v]+dist[v][t1]+dist[s2][u]+dist[v][t2]); if(dist[s1][u]+dist[u][v]+dist[v][t1]<=l1&&dist[s2][v]+dist[v][u]+dist[u][t2]<=l2)
ans=min(ans,dist[s1][u]+dist[u][v]+dist[v][t1]+dist[s2][v]+dist[u][t2]); }
printf("%d\n",m-ans);
}
return 0;
}

  分析:

1.反过来思考,转换为求s1到t1和s2到t2的最短路。

2.假如上述两条最短路没有公共边,那么显然能删除的边就是除这两条路以外的所有的边;

但是假如有重合的边呢?那么我们只需要暴力枚举可能在哪一段重合就好,核心是要让这两条最短路

总共占据的边数尽可能少,这样删除的边才会尽可能多。

Codeforces Round #302 (Div. 2) D. 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 Round #302 (Div. 2) D - Destroying Roads 图论,最短路

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

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

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

  4. 完全背包 Codeforces Round #302 (Div. 2) C Writing Code

    题目传送门 /* 题意:n个程序员,每个人每行写a[i]个bug,现在写m行,最多出现b个bug,问可能的方案有几个 完全背包:dp[i][j][k] 表示i个人,j行,k个bug dp[0][0][ ...

  5. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 /* 题意:在n^n的海洋里是否有k块陆地 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 输出完k个L后,之后全部输出S:) 5 10 的例子可以是这样的: LSLS ...

  6. 水题 Codeforces Round #302 (Div. 2) A Set of Strings

    题目传送门 /* 题意:一个字符串分割成k段,每段开头字母不相同 水题:记录每个字母出现的次数,每一次分割把首字母的次数降为0,最后一段直接全部输出 */ #include <cstdio> ...

  7. Codeforces Round #302 (Div. 2)

    A. Set of Strings 题意:能否把一个字符串划分为n段,且每段第一个字母都不相同? 思路:判断字符串中出现的字符种数,然后划分即可. #include<iostream> # ...

  8. Codeforces Round #369 (Div. 2) D. Directed Roads 数学

    D. Directed Roads 题目连接: http://www.codeforces.com/contest/711/problem/D Description ZS the Coder and ...

  9. Codeforces Round #369 (Div. 2) D. Directed Roads —— DFS找环 + 快速幂

    题目链接:http://codeforces.com/problemset/problem/711/D D. Directed Roads time limit per test 2 seconds ...

随机推荐

  1. Django 调用支付宝接口

    目录 一  支付宝接口 二  视图函数 支付宝支付 正式环境:用营业执照,申请商户号,appid 测试环境:沙箱环境:https://openhome.alipay.com/platform/appD ...

  2. DVWA、 DSVM 环境搭建简述

    DVWA(http://www.dvwa.co.uk/)是一个本地的漏洞演示环境基于PHP和Mysql . 另外还有基于Python的DSVM部署起来也十分简单.(https://github.com ...

  3. C++ day01 预备知识、C++综述、教材、推荐阅读。

    C++ day01: 1.预备知识? 1)什么是编程 编程,即编订程序. 程序 = 数据 + 算法(蛋糕 = 糖.鸡蛋.奶油 + 打鸡蛋.加糖.烤) 2)编程语言 最初的编程是用二进制代码(即“机器码 ...

  4. <<C++ Primer>> 第一章 开始 术语表

    术语表 第 1 章 开始 参数(实参, argument): 向函数传递值    赋值(assignment): 抹去一个对象当前值一个新值取代之    缓冲区(buffer): 一个存储区域, 用于 ...

  5. Python爬虫之简单的爬取百度贴吧数据

    首先要使用的第类库有 urllib下的request  以及urllib下的parse  以及 time包  random包 之后我们定义一个名叫BaiduSpider类用来爬取信息 属性有 url: ...

  6. 小白学习django第二站-模版配置

    上一站说道app创建,接下来我们来配置app的url路由 首先需要到setting.py中添加book这个app, 再到django_test文件里的urls添加路由 include() : 这个函数 ...

  7. 日语能力考试N2级核心词汇必备—形容词

    日语能力考试N2级核心词汇必备—形容词 ありがたい·有難い 难得的,值得感谢的,真高兴的あかい·赤い 红色的,左翼的,共产主义的あさい·浅い 浅的,事物的程度等小的,色淡的,浅薄的,肤浅的あつい· 1 ...

  8. time、date、datetime、timestamp和year

    在此声明mysql数据库 时间上总共有五中表示方法:它们分别是 time.date.datetime.timestamp和year. time : “hh:mm:ss”格式表示的时间值,格式显示TIM ...

  9. laravel5.8 源码分析(1) Route

    https://learnku.com/docs/laravel/5.8 源码路径 vendor\laravel\framework\src\Illuminate\Routing\Router.php ...

  10. 从标准输入读取一行数组并保存(用的是字符串分割函数strtok_s() )

    首先介绍字符串分割函数: char *strtok_s( char *strToken, //字符串包含一个标记或一个以上的标记. const char *strDelimit, //分隔符的设置 c ...