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

分析:

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

我们先考虑一条最短路,别问我我怎么会的显然,就是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. JSON对象与字符串之间的相互转换 - CSDN博客

    原文:JSON对象与字符串之间的相互转换 - CSDN博客 <html> <head> <meta name="viewport" content=& ...

  2. 微软Skype实时口译增加中文

    直击现场 在机器翻译技术上,微软的 Skype 业务也算是行业内名列前茅.日前其实时口语翻译技术再次跃升一个台阶,新增了对中文(普通话)的翻译支持. 据美国科技新闻网站 TheVerge 报道,此前, ...

  3. CREATE CSS3是一款在线集成众多CSS3功能的生成器,可以在线生成常用的CSS3效果

    CREATE CSS3是一款在线集成众多CSS3功能的生成器,可以在线生成常用的CSS3效果 CREATE CSS3 彩蛋爆料直击现场 CREATE CSS3是一款在线集成众多CSS3功能的生成器,可 ...

  4. Wolf RPG Editor游戏解包

    前言 使用arc_conv_r53进行解包 使用touhouSE进行解包 使用DXEXTRACT进行解包 前言 Wolf RPG Editor由于其需要翻来覆去的转码,脚本名称等问题算是解包跟汉化中比 ...

  5. delphi LPT1端口打印与开钱箱

    {设置打印机}Assignfile(RPrinter,'LPT1'); {准备写文件}Rewrite(RPrinter); {向后倒纸}//Writeln(RPrinter,chr($b)+chr(2 ...

  6. VirtualTreeView控件

    很好用的一个列表控件,可以用来代替Delphi自带的ListView和TreeView,而且也一直在更新,目前已经支持最新的XE2 官方网站:http://www.soft-gems.net SVN地 ...

  7. c#与JAVA利用SOCKET实现异步通信的SanNiuSignal.DLL已开源

    大家好,前段时间C#的SanNiuSignal.DLL已开源;因部分用户特需要JAVA版的SanNiuSignal;现在只能把半成品先拿出来暂时给他们用了,以后再慢慢改进; JAVA版目前已实现跟C# ...

  8. idea 导入maven项目

    1.import project 2.选择maven项目 3.选择第二个external moudle,选择maven, 4.点击next,一次点击1,2,3,4 5.设置maven环境 6.点击ok ...

  9. 跟我学SpringCloud | 第二篇:注册中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  10. 洛谷 题解 UVA658 【这不是bug,而是特性 It's not a Bug, it's a Feature!】

    [题意] 补丁在修正\(BUG\)时,有时也会引入新的\(BUG\),假定有\(n(n<=20)\)个潜在\(BUG\),和\(m(m<=100)\)个补丁,每个补丁用两个长度为\(n\) ...