hihoCoder#1139 二分·二分答案
2024-09-07 16:46:25
挺简单一道题,结果因为一时傻逼写错一个小地方,导致WA成狗了_(:з」∠)_
代码:
#include <iostream>
#include <cstring>
#include <queue> using namespace std; #define MAX_V 10008
#define MAX_E 200008 int N, M, K, T;
int f[MAX_V];
bool v[MAX_V];
int n[MAX_E];
int w[MAX_E];
int t[MAX_E];
int max_w = ;;
int min_w = ; bool check(int l) {
queue<pair<int, int> > q;
memset(v, , sizeof(v));
q.push(pair<int, int>(, K));
while (!q.empty()) {
pair<int, int> p = q.front();
q.pop();
if (p.first == T && p.second >= )
return true;
if (p.second == || v[p.first])
continue;
v[p.first] = true;
for (int i = f[p.first]; i != ; i = n[i]) {
if (w[i] > l || v[t[i]])
continue;
q.push(pair<int, int>(t[i], p.second - ));
}
}
return false;
} int find(int l, int r) {
int res = r;
while (l <= r) {
int m = (l + r) / ;
if (check(m)) {
res = m;
r = m - ;
}
else
l = m + ;
}
return res;
} int main() {
memset(n, , sizeof(n));
scanf("%d%d%d%d", &N, &M, &K, &T);
for (int i = , j = ; i < M; i++) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
min_w = min(min_w, c);
max_w = max(max_w, c);
j++;
w[j] = c;
t[j] = b;
n[j] = f[a];
f[a] = j;
j++;
w[j] = c;
t[j] = a;
n[j] = f[b];
f[b] = j;
}
if (T == )
printf("0\n");
else
printf("%d\n", find(min_w, max_w));
return ;
}
最新文章
- C#开发微信门户及应用(15)-微信菜单增加扫一扫、发图片、发地理位置功能
- 数组类型与sizeof与指针的引用
- js 同for一样效果 (延迟)每秒循环一次 追加
- 为何jquery动态添加的input value无法提交到数据库?【坑】
- 史上最全的Win8快捷键大全
- Wilcoxon test
- tomcat中的URL参数为中文,servlet接收后显示乱码
- 高级UNIX环境编程5 标准IO库
- 新秀系列C/C++经典问题(六)
- Zookeeper的安装的配置
- IDEA热部署(一)---解析关键配置。
- cef-3.2623 build on vs2013
- 【Django】关于上传图片遇到的问题
- B - Frogger 最短路变形('最长路'求'最短路','最短路'求'最长路')
- BZOJ3377 [Usaco2004 Open]The Cow Lineup 奶牛序列 其他
- linux write/wall 1
- 【K8S学习笔记】Part1:使用端口转发访问集群内的应用
- UVa 10801 电梯换乘
- SQL之经典SQL语句大全
- JSFF或JSF页面加载时触发JavaScript之方法