意甲冠军:

到n节点无向图,它要求从一个线1至n路径。你可以让他们在k无条,的最大值。如今要求花费的最小值。

思路:

这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些。spfa的本质是一种搜索算法,既然是搜索,就涉及到状态的转移。

在一般求最短路的spfa算法中,当到结点u时,对e(u,v)仅仅需做例如以下转移:if(d[v]>d[u]+w(e)) d[v]=d[u]+w(e)。在跟一般的情况下。到结点u,对e(u,v)需做多种转移。比方这题中要考虑让e免费和不让e免费两种情况,详细的请參考实现。

代码:

//poj 3662
//sepNINE
#include <iostream>
#include <queue>
using namespace std;
const int maxN=1024;
const int maxM=10024; struct Edge
{
int v,w,next;
}edge[maxM*2]; struct Node
{
int u,used;
};
int n,p,k,e;
int head[maxN],dis[maxN][maxN],vis[maxN][maxN]; void spfa(int s,int t,int k)
{
queue<Node> Q;
memset(vis,0,sizeof(vis));
int i,j;
for(i=1;i<=n;++i)
for(j=0;j<=k;++j)
dis[i][j]=INT_MAX;
Node x;
x.u=s;
x.used=0;
dis[s][0]=0;
vis[s][0]=1;
Q.push(x);
while(!Q.empty()){
Node x=Q.front();
int u=x.u,used=x.used;
Q.pop();
vis[u][used]=0;
for(int i=head[u];i!=-1;i=edge[i].next){
int v=edge[i].v,w=edge[i].w;
if(used+1<=k&&dis[v][used+1]>dis[u][used]){//让这条边免费,免费的边数used要+1
dis[v][used+1]=dis[u][used];
if(vis[v][used+1]==0){
Node x;
x.u=v;x.used=used+1;
vis[x.u][x.used]=1;
Q.push(x);
}
}
if(dis[v][used]>max(dis[u][used],w)){//不让这条边免费。dis[v][used]为dis[u][used]和w中的最大值
dis[v][used]=max(dis[u][used],w);
if(vis[v][used]==0){
Node x;
x.u=v;x.used=used;
vis[x.u][x.used]=1;
Q.push(x);
}
}
} }
return ;
} int main()
{
scanf("%d%d%d",&n,&p,&k);
e=0;
memset(head,-1,sizeof(head));
while(p--){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
edge[e].v=b;edge[e].w=c,edge[e].next=head[a];head[a]=e++;
edge[e].v=a;edge[e].w=c;edge[e].next=head[b];head[b]=e++;
}
spfa(1,n,k);
int ans=INT_MAX;
for(int i=0;i<=k;++i)
ans=min(ans,dis[n][i]);
if(ans==INT_MAX)
printf("-1");
else
printf("%d",ans);
return 0;
}

poj 3662 Telephone Lines spfa算法灵活运用的更多相关文章

  1. (poj 3662) Telephone Lines 最短路+二分

    题目链接:http://poj.org/problem?id=3662 Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total ...

  2. POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7214   Accepted: 2638 D ...

  3. poj 3662 Telephone Lines

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7115   Accepted: 2603 D ...

  4. POJ 3662 Telephone Lines (分层图)

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6785   Accepted: 2498 D ...

  5. poj 3662 Telephone Lines(最短路+二分)

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6973   Accepted: 2554 D ...

  6. poj 3662 Telephone Lines dijkstra+二分搜索

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5696   Accepted: 2071 D ...

  7. POJ 3662 Telephone Lines(二分答案+SPFA)

    [题目链接] http://poj.org/problem?id=3662 [题目大意] 给出点,给出两点之间连线的长度,有k次免费连线, 要求从起点连到终点,所用的费用为免费连线外的最长的长度. 求 ...

  8. poj 3662 Telephone Lines(好题!!!二分搜索+dijkstra)

    Description Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone compa ...

  9. POJ 3662 Telephone Lines (二分 + 最短路)

    Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncoop ...

随机推荐

  1. FZU2181+poj2942(点双连通+判奇圈)

    分析:我们对于那些相互不憎恨的人连边,将每次参加会议的所有人(不一定是全部人,只需人数>=3且为奇数)看做一个点双联通分量,那么每个点都至少有两个点与他相邻.即需要保证双联通分量中存在奇圈.至于 ...

  2. API拾遗录之Fragment

    Fragment必须内嵌到activity中,它不能单独使用,并且它的生命周期受到activity生命周期的制约——当activity暂停时,所有的fragment暂停,当activity停止时,所有 ...

  3. hdu2050(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2050 (1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域. 析:可能你 ...

  4. Redis集群_3.redis主从自动切换Sentinel(转)

    Redis SentinelSentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中 一.Sentinel作用:1):Master状态检测 2 ...

  5. poj3237(树链剖分)

    题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值): 2)取反操作,将a ...

  6. CentOS修改yum更新源

    1. 在修改前先备份该文件 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2. 修改更新源配置文 ...

  7. iScreenLocker 3.1.8 安卓锁屏通知--苹果一样的体验

    *软件介绍: 苹果锁屏通知(iScreenLocker)是一款android上ios风格的锁屏软件.它颠覆安智通知设计,将原来状态栏的通知搬到锁屏界面上来,能够在桌面轻松收发短信,微博,微信等消息.它 ...

  8. 辛星与您使用CSS导航条

    第一步.我们创建了一个新的my.html档.在内容填入如下面.这个html文件不动,直到最后.正是这些内容: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...

  9. Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例

    Linux下Oracle11G RAC报错:在安装oracle软件时报file notfound一例 1.现象 之前安装一切都比較顺利,安装oracle软件时,进度到30%时报错:file not f ...

  10. mmc生产任务分配问题

    mmc生产任务分配问题,本题目简单.