解题思路:
只需算出各点到起点的距离,求出最大值,如果出现正无穷,则说明传送不到,输出-1,否则更新ans
注意事项:

参考代码:

  #include<iostream>

  #include<cstring>

  #include<algorithm>

  #include<iomanip>

  #include<stack>

  #include<queue>


  using namespace std;

  const int N=1e6+10;

  int h[N],ne[N],e[N],idx;

  int dix[N];

  bool can[N];

  int g[1010][1010];

  int n,m,k,S,T;

  int hh=1,tt=0;

  int level[N];

  int gap;int w[N];

  int ox,oy;

  void add(int x,int y,int z)

  {

  e[idx]=y;

  w[idx]=z;

  ne[idx]=h[x];

  h[x]=idx++;




  }


  void  dij()

  {

  memset(dix,0x3f,sizeof dix);

  dix[1]=0;

  queue<int >s;

  can[1]=true;

  s.push(1);

  while(s.size())

  {

  int f=s.front();

  s.pop();

  can[f]=false;

  for(int i=h[f];i!=-1;i=ne[i])

  {

  int j=e[i];

  if(dix[j]>dix[f]+w[i])

  {


    dix[j]=dix[f]+w[i];

    if(!can[j]){

      can[j]=true;

      s.push(j);

    }

  }



  }




  }




  }


  int main()

  {

  memset(h,-1,sizeof h);


    cin>>n>>m;

    for(int i=1;i<=m;i++)

    {


      int x,y,z;

      cin>>x>>y>>z;

      add(x,y,z);

      add(y,x,z);

    }

    dij();

    int ans=0;

    for(int i=1;i<=n;i++){

      if(dix[i]==0x3f3f3f3f){

        cout<<-1;

        return 0;

      }

      else ans=max(ans,dix[i]);

    }

    cout<<ans;

  return 0;

  }


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论