社区讨论
怎么会RE的?我在ACWING上AC了
P1948[USACO08JAN] Telephone Lines S参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lupslzxn
- 此快照首次捕获于
- 2024/04/08 01:23 2 年前
- 此快照最后确认于
- 2024/04/08 15:56 2 年前
CPP
//
// main.cpp
// 1
//
// Created by X on 2024/4/6.
//
#include<bits/stdc++.h>
#define int long long
#define inf 0x3f3f3f3f
using namespace std;
int n,m,k;
const int N = 1001;
int A[N][N];
int B[N][N];
bool check(int mid){
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
B[i][j]=A[i][j];
}
}
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
if(B[i][j]==inf) continue;
else if (B[i][j]<mid) B[i][j]=0;
else B[i][j]=1;
}
}
bool vis[1001]={0};
int dis[1001]={0};
for (int i=2; i<=n; i++) dis[i]=inf;
for (int i=1; i<=n; i++) {
int cnt=-1;
int _min=inf;
for (int j=1; j<=n; j++) {
if(_min>dis[j]&&!vis[j]){
cnt=j;
_min=dis[j];
}
}
vis[cnt]=1;
for (int j=1; j<=n; j++) {
dis[j]=min(dis[j],dis[cnt]+B[cnt][j]);
}
}
return dis[n]>k;
}
//1到n的最短路径里面的第k跳最短
signed main() {
cin>>n>>m>>k;
for (int i=1; i<=1000; i++) {
for (int j=1; j<=1000; j++) {
A[i][j]=inf;
}
}
for (int i=1; i<=m; i++) {
int x,y,z;
cin>>x>>y>>z;
A[x][y]=min(A[x][y],z);
A[y][x]=min(A[y][x],z);
}
int l=0,r=1000005;
while (l<r) {
int mid=(l+r+1)/2;
if(check(mid)){
l=mid;
}
else{
r=mid-1;
}
}
if (l==1000005) {
cout<<"-1"<<endl;
}
else cout<<l<<endl;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...