题目:有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.假如上述两条最短路没有公共边,那么显然能删除的边就是除这两条路以外的所有的边;

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

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

最新文章

  1. python pickle 序列化类
  2. js判断空对象
  3. Java之构造器的作用
  4. centos linux从无到有安装wordpress
  5. (转)使用SQLCMD在SQLServer执行多个脚本
  6. P73、面试题9:斐波那契数列
  7. YouTube CEO关于工作和生活平衡的完美回答
  8. Codeforces Round #274 (Div. 2) E. Riding in a Lift(DP)
  9. 如何快速方便的输出向量vector容器中不重复的内容
  10. Spring.Net-创建对象
  11. jquery 监听回车提交
  12. iOS 选择排序
  13. .so的封装调用
  14. ionic3 ionic serve build fail Error: webpackJsonP is not defined
  15. [转]C#串口通信 SerialPort类
  16. 简单的异步函数async/await例子
  17. 004 Spark中的local模式的配置以及测试
  18. ecstore-安装提示flock,即使绕过检测,安装成功后还是提示t function 解决办法
  19. es6初级之解构----之一
  20. 使用MaxCompute访问TableStore(OTS) 简明手册

热门文章

  1. java中抽象类、接口及区别
  2. 9.Jmeter 多个threadgroup 中的配置元件会一次性进行初始化
  3. 微信小程序资源整理
  4. 四、Kubernetes_V1.10集群部署-master-创建kubeconfig
  5. window7下安装Elasticseach5.2.2
  6. 严重报错: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
  7. The Preliminary Contest for ICPC Asia Shanghai 2019 A. Lightning Routing I
  8. sql server 幂运算函数power(x,y)、square(x)、exp(x)
  9. Hostapd初始化失败
  10. Window10的激活步骤