Destroying Roads

题目链接

题意

n个点,m条边每两个点之间不会有两个相同的边,然后给你两个起s1,s2和终点t1,t2;

求删除最多的边后满足两个s1到t1距离\(<=l1\),s2到t2的距离\(<=l2\)

求能删除最多的边。

思路

先bfs求出每两个点之间的最短路,然后暴力枚举两条路径的重合路径,枚举时有两种组合,$$(s1,s2)(t1,t2)||(s1,t2)(s2,t1)$$

枚举的重合路径为[i][j],所以可以删除的边为总的边数减去满足两个条件所要求的最小边数,复杂度(nmlog(m));

代码

#include<bits/stdc++.h>
using namespace std;
vector<int>vec[3005];
int short_pa[3005][3005];
bool flag[3005];
queue<int>que;
void bfs(int n);
int main(void)
{
int n,m;
scanf("%d %d",&n,&m);
int all = m;
memset(short_pa,0x3f,sizeof(short_pa));
int maxx = short_pa[0][0];
while(m--)
{
int x,y;
scanf("%d %d",&x,&y);
vec[x].push_back(y);
vec[y].push_back(x);
}
int s1,t1,co1;
int s2,t2,co2;
scanf("%d %d %d",&s1,&t1,&co1);
scanf("%d %d %d",&s2,&t2,&co2);
for(int i = 1; i <= n; i++)
{
bfs(i);
}
int minn = short_pa[s1][t1] + short_pa[s2][t2];
bool fl = false;
if(short_pa[s1][t1] > co1||short_pa[s2][t2] > co2)
fl = true;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
if(short_pa[s1][i] + short_pa[i][j] + short_pa[j][t1] <= co1&&short_pa[s2][i] + short_pa[i][j] + short_pa[j][t2] <= co2)
{
minn = min(short_pa[s1][i] + short_pa[s2][i] + short_pa[i][j] + short_pa[j][t1] + short_pa[j][t2],minn);
}
if(short_pa[s1][i] + short_pa[i][j] + short_pa[j][t1] <= co1&&short_pa[t2][i] + short_pa[i][j] + short_pa[j][s2] <= co2)
{
minn = min(short_pa[s1][i] + short_pa[t2][i] + short_pa[i][j] + short_pa[j][t1] + short_pa[j][s2],minn);
}
}
}
if(fl)printf("-1\n");
else
printf("%d\n",all - minn);
return 0;
}
void bfs(int n)
{
memset(flag,0,sizeof(flag));
flag[n] = true;
short_pa[n][n] = 0;
while(!que.empty())
que.pop();
que.push(n);
while(!que.empty())
{
int id = que.front();
que.pop();
for(int i = 0; i < vec[id].size(); i++)
{
int ic = vec[id][i];
if(!flag[ic])
{
flag[ic] = true;
short_pa[n][ic]= short_pa[n][id] + 1;
que.push(ic);
}
}
}
}

最新文章

  1. Eclipse调试Android App若选择&ldquo;Use same device for future launches&rdquo;就再也无法选择其他设备的问题
  2. CYQ.Data 数据层框架 CYQ.Data 数据框架 使用篇四 MAction 增删改
  3. 关于UIView的显示问题
  4. C++用法的学习心得(要求包含示例,并反映出利用网络获取帮助的过程)
  5. ubuntu笔记
  6. Web UI - Javascript之DOM Ready
  7. PRML读书会第十四章 Combining Models(committees,Boosting,AdaBoost,决策树,条件混合模型)
  8. IIS配置php运行环境默认加载的php.ini路径
  9. mysql 登录及常用命令
  10. corresponding SQLSTATE values general error
  11. MongoDB 2: 安装和使用
  12. js 异步请求封装
  13. uglifyjs使用
  14. Apache Commons Beanutils对象属性批量复制(pseudo-singleton)
  15. NET Core开发-获取所有注入(DI)服务
  16. iWatch # 初始化工程
  17. 一步步教你使用rem适配不同屏幕的移动设备
  18. Java 公平锁与非公平锁学习研究
  19. [ncw7] 小睿睿的方案
  20. AtCoder Beginner Contest 120 解题报告

热门文章

  1. python爬虫之正则表达式(用在其他地方也可)
  2. SpringBoot 整合 MyBatis,实现 CRUD 示例
  3. [Emlog主题] Monkey V3.0 优化修改
  4. ES5中改变this指向的三种方法
  5. 强化学习实战 | 表格型Q-Learning玩井字棋(二)
  6. webservice--常用注解
  7. Linux之sftp服务
  8. 为什么要重写hashcode和equals方法
  9. spring jdbc 配置数据源连接数据库
  10. 【科研工具】MathType7.2的安装破解与使用