看到没有题解就贡献一波呗

分析:

这题其实就是想让我们求一个图中两条最短路的最短(好把更多的边删掉)。

我们先考虑一条最短路,别问我我怎么会的显然,就是s和t跑个最短路再用n-就行。

然后就是两条喽!这不就是做两次吗,我太巨了!

这当然是可以的

——不过只是一种情况

考虑到我们的两条路径可能会有重合,我们只好枚举重合最短路的左右端点,将路径分为5段(6段?)来处理。

然后问题基本就解决了,最开始把两两点之间预处理出最短路,这里要注意bfs即可别告诉我你要用Floyd

最后的答案如果比m大就-1了。

l1,l2的限制条件不要忘了判断鸭!

代码:

#include<cstdio>
#include<queue>
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int d[3005][3005];
int vis[3005];
vector<int>e[3005];
void bfs(int s)
{
memset(vis,0,sizeof(vis));
queue<int>q;
q.push(s);
//vis[s]=1;
d[s][s]=0;
while(!q.empty())
{
int x=q.front();q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=0;i<e[x].size();i++)
{
int y=e[x][i];
if(d[s][y]==-1)
{
d[s][y]=d[s][x]+1;
//printf("%d\n",d[s][y]);
q.push(y);
}
}
}
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
memset(d,-1,sizeof(d));
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
e[x].push_back(y);
e[y].push_back(x);
}
int s1,t1,l1,s2,t2,l2;
scanf("%d%d%d",&s1,&t1,&l1);
scanf("%d%d%d",&s2,&t2,&l2);
for(int i=1;i<=n;i++)
{
// printf("qaq\n");
bfs(i);
}
/*for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
printf("%d ",d[i][j]);
}
printf("\n");
}*/
int ans=999999999;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(d[s1][i]+d[i][j]+d[j][t1]>l1)continue;
if(d[s2][i]+d[i][j]+d[j][t2]>l2)continue;
ans=min(ans,d[s1][i]+d[i][j]+d[j][t1]+d[s2][i]+d[i][j]+d[j][t2]-d[i][j]);
}
}
if(d[s1][t1]<=l1&&d[s2][t2]<=l2)
{
ans=min(ans,d[s1][t1]+d[s2][t2]);
}
swap(s2,t2);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(d[s1][i]+d[i][j]+d[j][t1]>l1)continue;
if(d[s2][i]+d[i][j]+d[j][t2]>l2)continue;
ans=min(ans,d[s1][i]+d[i][j]+d[j][t1]+d[s2][i]+d[i][j]+d[j][t2]-d[i][j]);
}
}
if(d[s1][t1]<=l1&&d[s2][t2]<=l2)
{
ans=min(ans,d[s1][t1]+d[s2][t2]);
}
if(ans>m)printf("-1\n");
else
printf("%d\n",m-ans);
return 0;
}

CF543B Destroying Roads 题解的更多相关文章

  1. CF543B Destroying Roads 枚举 + 思维 + BFS

    Code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in", ...

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

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

  4. CF Destroying Roads (最短路)

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

  5. Codeforces 543.B Destroying Roads

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

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

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

  7. [CF544] D. Destroying Roads

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

  8. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

  9. B. Destroying Roads

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

随机推荐

  1. DDD中的值对象如何用NHibernate进行映射

    原文:DDD中的值对象如何用NHibernate进行映射 <component/>是NHibernate中一个有趣的特性,即是用来映射DDD(Data-Display-Debuger)概念 ...

  2. 改善C#程序的建议6:在线程同步中使用信号量

    原文:改善C#程序的建议6:在线程同步中使用信号量 所谓线程同步,就是多个线程之间在某个对象上执行等待(也可理解为锁定该对象),直到该对象被解除锁定.C#中对象的类型分为引用类型和值类型.CLR在这两 ...

  3. Visual studio调试Web发生未能正常启动IIS express

    今天调试web时,不知道怎么搞的,昨天还好好的,结果今天怎么也没法调试了.VS里报的错误是进程号为**的未能正常启动,看了下调试时IIS压根就没启动起来,没关系,看看事件管理器里发生了什么 找到个最关 ...

  4. C++没有库则寸步难行,有库则几乎可以做任何事情——Bjarne Stroustrupi

    "Without a good library, most interesting tasks are hard to do in C++; but given a good library ...

  5. Web页面制作之开发调试工具

    直击现场 <HTML开发MacOSApp教程>  http://pan.baidu.com/s/1jG1Q58M 开发工具介绍 开发工具一般分为两种类型:文本编辑器和集成开发环境(IDE) ...

  6. win7如何开启快速启动栏

    设置步骤如下: 1.右键任务栏空白区域,检查是否解除锁定任务栏,需解锁: 2.右键任务栏空白区域,点击工具栏---新建工具栏: 3.选择C:\Users\Administrator\AppData\R ...

  7. spring boot自定义配置文件

    把一些可能会经常变动的东西写在配置文件中,可以增加程序的灵活性,避免多次改版发版. 在sping boot中除了自带的默认配置文件application.properties之外,我们还可以在reso ...

  8. Nodejs操作MySQL - 增删改查

    先安装npm模块项目 npm init 安装mysql npm install mysql --save Nodejs 连接msyql // 导入mysql const mysql = require ...

  9. python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析

    1.确保数据库编码是utf8编码.若不是,请将my.ini的client,mysql,mysqld三个字段下面添加default-character-set = utf8,这样可以永久改变在新建数据库 ...

  10. 编写loadrunner的ftp脚本(详细步骤)

    大家好,主要给大家讲解编写loadrunner的ftp脚本详细步骤,及FTP函数注释,及FTP脚本两种编写方式,手动和录制.亲测 No problem!^_^ 1.首先要了解loadrunner中几个 ...