51 nod 1444 破坏道路(BFS+枚举)
来源:互联网 发布:linux 网络限流 编辑:程序博客网 时间:2024/05/07 16:24
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1444
思路:先求出各点的最短路(n<=3000),然后枚举重叠部分,寻找最少路数
代码:
#include <bits/stdc++.h>using namespace std;const int N = 3005;typedef long long ll;int n,m;struct node{ int v,w; node(int v=0,int w=0):v(v),w(w){}};vector<int> G[N];int vis[N],d[N][N];void bfs(){ for(int s = 1;s <= n;s++) { memset(vis,0,sizeof(vis)); queue<int> q; q.push(s); vis[s] = 1; while(!q.empty()) { int u = q.front();q.pop(); for(int i = 0;i < G[u].size();i++) { int v = G[u][i]; if(!vis[v]) { vis[v] = 1; d[s][v] = d[s][u]+1; q.push(v); } } } }}int main(){ scanf("%d%d",&n,&m); int u,v; for(int i = 0;i < m;i++) { 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); bfs(); if(d[s1][t1] > l1 || d[s2][t2] > l2) return 0 * printf("-1\n"); int minn = d[s1][t1]+d[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 && d[s2][i]+d[i][j]+d[j][t2] <= l2) minn = min(minn, d[s1][i]+d[i][j]+d[j][t1]+d[s2][i]+d[j][t2]); if(d[s1][i]+d[i][j]+d[j][t1] <= l1 && d[t2][i]+d[i][j]+d[j][s2] <= l2) minn = min(minn, d[s1][i]+d[i][j]+d[j][t1]+d[t2][i]+d[j][s2]); } } printf("%d\n",m-minn);}
阅读全文
0 0
- 51 nod 1444 破坏道路(BFS+枚举)
- 51Nod 1444 破坏道路(最短路+枚举)
- 51nod 1444 破坏道路
- 51nod-1444 破坏道路
- 51Nod-1444-破坏道路
- 51nod 1444 破坏道路
- 51nod 1444 破坏道路 最短路
- 51nod 1444 破坏道路 最短路
- 51nod 1444 破坏道路【思维+最短路+枚举】这种题好套路啊
- 51nod 1444:破坏道路 广度优先搜索
- 1444 破坏道路
- 【51Nod1444】破坏道路
- 51nod 1483 化学变换 (枚举+bfs or 枚举+技巧)
- 破坏道路
- 51Nod - 1116 枚举 + 模拟
- 51Nod - 1548 枚举 + 暴力
- 51nod 1459 迷宫游戏(bfs与djsk)
- 51nod 01组成的N的倍数(bfs)
- Mac环境使用SVN向服务器提交代码
- [SDUT](2132)数据结构实验之栈二:一般算术表达式转换成后缀式 ---栈
- tcp和udp(二)
- 《C++ Primer》读书笔记第十一章-2-关联容器操作
- 4-表达式
- 51 nod 1444 破坏道路(BFS+枚举)
- linux安装软件的方式
- 接口与抽象类的区别
- 二叉树中和为某一值的路径
- php数据库字典
- Lua 源码分析 TString
- BZOJ2720 列队春游 [期望][数学]
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
- 【喜科堂】用户登录学习总结