P1137 旅行计划

Posted the-blog-of-mikasa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1137 旅行计划相关的知识,希望对你有一定的参考价值。

这题很简单,1分钟想出思路,5分钟打出代码(全WA),找错5分钟(主要是有坑qwq),码量并不长

主要是打了几天线段树,树链剖分(动不动就是几百行代码),写写题解放松一下

本题解力求通俗易懂

题意

给出一个有向图,从任一城市出发到一城市(可以是它本身)最多经过多少城市

思路+代码

拿到题首先分析样例

RT

技术图片

城市1:1(1)

城市2:1->2(2)

城市3:1->2->3(3)

城市4:1->2->3->4(4)

城市5:1->2->5(3)

手动推一下很明显,从入度为0的节点向下扩展

那么就用dfs或bfs实现

我选择了bfs(即spfa)

代码如下

#include<bits/stdc++.h>
using namespace std;
vector<int> to[100010];
bool used[100010];
int ans[100010];
int main( ){
    int n,m,x,y,j;
    vector<int>::iterator i;
    scanf("%d%d",&n,&m);
    while(m--){
        scanf("%d%d",&x,&y);
        to[x].push_back(y);
    }        //输入+存储
    queue<int>q;
    q.push(1);
    ans[1]=1;      //初始化
    while(!q.empty()){   //sppfa模板
        x=q.front( );
        q.pop( );
        used[x]=0;
        for(i=to[x].begin();i<to[x].end();i++)
        if(ans[*i]<ans[x]+1){
            ans[*i]=ans[x]+1;
            if(!used[*i]){
                q.push(*i);
                used[*i]=1;
            }
        }
    }
    for(j=1;j<=n;j++)
    printf("%d
",ans[j]);
}

样例华丽通过

提交?全WA?

经过分析(看题解),原来出度为0的城市不止一座

说好的 ?均选择从城市1出发可以得到以上答案。? 呢????????

完美AC代码

#include<bits/stdc++.h>
using namespace std;
vector<int> to[100010];
bool used[100010],ok[100010];
int ans[100010];
int main( ){
    int n,m,x,y,j;
    vector<int>::iterator i;
    scanf("%d%d",&n,&m);
    while(m--){
        scanf("%d%d",&x,&y);
        ok[y]=1;                 //记录入度是否为0
        to[x].push_back(y);
    }
    queue<int>q;
    for(j=1;j<=n;j++)           //存入所有入度为0的城市
    if(!ok[j]){
        q.push(j);
        ans[j]=1;
        used[j]=1;
    }
    while(!q.empty()){
        x=q.front( );
        q.pop( );
        used[x]=0;
        for(i=to[x].begin();i<to[x].end();i++)
        if(ans[*i]<ans[x]+1){
            ans[*i]=ans[x]+1;
            if(!used[*i]){
                q.push(*i);
                used[*i]=1;
            }
        }
    }
    for(j=1;j<=n;j++)printf("%d
",ans[j]);
}

完美AC

以上是关于P1137 旅行计划的主要内容,如果未能解决你的问题,请参考以下文章

P1137 旅行计划

洛谷P1137 旅行计划

P1137 旅行计划

luogu P1137 旅行计划 题解

洛谷P1137 旅行计划 拓扑排序 图论

P1137 旅行计划