Telephone Lines
https://vjudge.net/contest/350871#problem/L
题意:有n个点m条边,每条边为双向且有一个权值,最多可以让k条边的权值变为0,现要最小化从n号点到1号点经过的边权的最大值
思路1:将原图看作k+1层,每层有n个点, d i s [ u ] [ j ] dis[u][j] dis[u][j] 表示到第j层的第u号点的边权最大值,即为当有j条边的权值置0时到u号点权值的最大值,可用 d i s [ u ] [ j ] dis[u][j] dis[u][j]更新 d i s [ v ] [ j + 1 ] dis[v][j+1] dis[v][j+1](其中u,v之间有边相连,边权为w),即将(u,v)这条边的权值置0,用max( d i s [ u ] [ j ] dis[u][j] dis[u][j], w w w)更新 d i s [ v ] [ j ] dis[v][j] dis[v][j],即(u,v)这条边不置0的情况,类似SPFA跑最短路即可(注:这题卡dijkstra不卡SPFA)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define MAXN 1005
#define MAXM 10005
#define INF 0x3f3f3f3f
using namespace std;
int head[MAXN],tot;
struct edge
{
int v,w,nxt;
}edg[MAXM << 1];
inline void addedg(int u,int v,int w)
{
edg[tot].v = v;
edg[tot].w = w;
edg[tot].nxt = head[u];
head[u] = tot++;
}
int n,m,dis[MAXN][MAXN],k,cnt[MAXN][MAXN],vis[MAXN][MAXN];
struct node
{
int u,c;
node(){}
node(int u,int c):u(u),c(c){}
}nod;
queue<node> qu;
inline bool SPFA(int s)
{
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
while(!qu.empty())
qu.pop();
dis[s][0] = 0;
vis[s][0] = 1;
qu.push(node(s,0));
int u,v,c;
while(!qu.empty())
{
nod = qu.front();
qu.pop();
u = nod.u,c = nod.c;
vis[u][c] = 0;
for(int i = head[u];i != -1;i = edg[i].nxt)
{
v = edg[i].v;
if(max(dis[u][c],edg[i].w) < dis[v][c])
{
dis[v][c] = max(dis[u][c],edg[i].w);
if(!vis[v][c])
{
vis[v][c] = 1;
qu.push(node(v,c));
if(++cnt[v][c] > n*(k+1))
return false;
}
}
if(c < k && dis[u][c] < dis[v][c+1])
{
dis[v][c+1] = dis[u][c];
if(!vis[v][c+1])
{
vis[v][c+1] = 1;
qu.push(node(v,c+1));
if(++cnt[v][c+1] > n*(k+1))
return false;
}
}
}
}
return true;
}
inline void init()
{
memset(head,-1,sizeof(int)*(n+1));
tot = 0;
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&k))
{
int u,v,w;
init();
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
addedg(u,v,w);
addedg(v,u,w);
}
SPFA(n);
int minn = INF;
for(int i = 0;i <= k;++i)
minn = min(minn,dis[1][i]);
if(minn == INF)
minn = -1;
printf("%d\n",minn);
}
return 0;
}
思路2:
https://blog.youkuaiyun.com/xing_mo/article/details/103926607