Codeforces Round #302 (Div. 1) B - Destroying Roads
思路:这么菜的题我居然想了40分钟。。。 n^2枚举两个交汇点,点与点之间肯定都跑最短路,取最小值。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ; int d[N][N], n, m, s1, t1, l1, s2, t2, l2;
vector<int> edge[N];
void Dij(int S, int d[N]) {
queue<int> que;
d[S] = ; que.push(S);
while(!que.empty()) {
int u = que.front(); que.pop();
for(int v : edge[u]) {
if(~d[v]) continue;
d[v] = d[u] + ;
que.push(v);
}
}
} int cal(int u, int v) {
int ret1 = min(d[s1][u] + d[t1][v], d[t1][u] + d[s1][v]);
int ret2 = min(d[s2][u] + d[t2][v], d[t2][u] + d[s2][v]);
if(ret1 + d[u][v] > l1 || ret2 + d[u][v] > l2) return inf; return d[u][v] + ret1 + ret2;
} int main() {
memset(d, -, sizeof(d));
scanf("%d%d", &n, &m);
for(int i = ; i <= m; i++) {
int u, v;
scanf("%d%d", &u, &v);
edge[u].push_back(v);
edge[v].push_back(u);
}
for(int i = ; i <= n; i++) Dij(i, d[i]);
scanf("%d%d%d%d%d%d", &s1, &t1, &l1, &s2, &t2, &l2); if(d[s1][t1] > l1 || d[s2][t2] > l2) {
puts("-1");
return ;
}
int ans = d[s1][t1] + d[s2][t2]; for(int u = ; u <= n; u++) {
for(int v = ; v <= n; v++) {
ans = min(ans, cal(u, v));
}
}
printf("%d\n", m - ans);
return ;
} /*
*/
Codeforces Round #302 (Div. 1) B - Destroying Roads的更多相关文章
- Codeforces Round #302 (Div. 2) D - Destroying Roads 图论,最短路
D - Destroying Roads Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544 ...
- Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路
题目链接: 题目 D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路 删边
题目:有n个城镇,m条边权为1的双向边让你破坏最多的道路,使得从s1到t1,从s2到t2的距离分别不超过d1和d2. #include <iostream> #include <cs ...
- 完全背包 Codeforces Round #302 (Div. 2) C Writing Code
题目传送门 /* 题意:n个程序员,每个人每行写a[i]个bug,现在写m行,最多出现b个bug,问可能的方案有几个 完全背包:dp[i][j][k] 表示i个人,j行,k个bug dp[0][0][ ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 /* 题意:在n^n的海洋里是否有k块陆地 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 输出完k个L后,之后全部输出S:) 5 10 的例子可以是这样的: LSLS ...
- 水题 Codeforces Round #302 (Div. 2) A Set of Strings
题目传送门 /* 题意:一个字符串分割成k段,每段开头字母不相同 水题:记录每个字母出现的次数,每一次分割把首字母的次数降为0,最后一段直接全部输出 */ #include <cstdio> ...
- Codeforces Round #302 (Div. 2)
A. Set of Strings 题意:能否把一个字符串划分为n段,且每段第一个字母都不相同? 思路:判断字符串中出现的字符种数,然后划分即可. #include<iostream> # ...
- Codeforces Round #369 (Div. 2) D. Directed Roads 数学
D. Directed Roads 题目连接: http://www.codeforces.com/contest/711/problem/D Description ZS the Coder and ...
- Codeforces Round #369 (Div. 2) D. Directed Roads —— DFS找环 + 快速幂
题目链接:http://codeforces.com/problemset/problem/711/D D. Directed Roads time limit per test 2 seconds ...
随机推荐
- isnotblank与isnotempty的区别
- Netfilter之连接跟踪实现机制初步分析
Netfilter之连接跟踪实现机制初步分析 原文: http://blog.chinaunix.net/uid-22227409-id-2656910.html 什么是连接跟踪 连接跟踪(CONNT ...
- vim正则表达式小结
http://note.youdao.com/noteshare?id=7ca2ac5d2f37fcb0e7a2a9c811c6e568
- STL源码分析-vector
http://note.youdao.com/noteshare?id=55dc651a7489f1413b3a3169401dcf94
- java io-1基本概念
java io-1基本概念 2015-07-03 15:17 648人阅读 评论(0) 收藏 举报 分类: [JavaSE](37) 目录(?)[+] ------------------ ...
- OpenCV---图像加载与保存
一:获取图像的信息 什么是图像: 结构化存储的数据信息 图像属性: -通道数目 -高与宽 -像素数据 -位图深度 import cv2 as cv def get_image_info(image): ...
- [LeetCode] Matrix 值修改系列,例题 Surrounded Regions,Set Matrix Zeroes
引言 Matrix内部的值修改严格来讲放在一个系列里不大合适,因为对于不同的问题,所用的算法和技巧可能完全不同,权且这样归类,以后需要时再拆分吧. 例题 1 Given a 2D board cont ...
- 2017北京国庆刷题Day2 afternoon
期望得分:100+100+50=250 实际得分:100+70+50=220 T1 最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一 ...
- UVA-10779 Collectors Problem
https://vjudge.net/problem/UVA-10779 题意:n个人,m种贴纸,每个人开始有一些贴纸 第一个人可以跟任何人交换任何贴纸 其余人只能用重复的贴纸 跟第一个人交换他们没有 ...
- HDU 2157 How many ways?? 临接矩阵+快速幂
Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, ...