这题不加堆优化是一个点都过不去吗?
查看原帖
这题不加堆优化是一个点都过不去吗?
288716
lzqy_楼主2020/7/27 08:49

code:

#include <bits/stdc++.h>
using namespace std;
vector<int>v[100001],w[100001];
int d[100001];
bool k[100001];
int n,m,s;
int MAX=INT_MAX/2;
inline int read()                        //以字符串形式读入数字可提速
{
  int x=0;
  char c=getchar();
  for(; c<'0'  || c>'9';  c=getchar());
  for(; c<='9' && c>='0'; c=getchar())
    x=(x<<3)+(x<<1)+c-'0';               //位运算优化即x*8+x*2=x*10
  return x;
}

void Dijstra()
{
  for(int i=1; i<=n; i++)
    d[i]=MAX;
  for(int i=v[s].size()-1; i>=0; i--)
    d[v[s][i]]=w[s][i];
  d[s]=0;
  k[s]=1;
  for(int j=1; j<n; j++)
  {
    int mmax=MAX,p;
    for(int i=1; i<=n; i++)
      if(d[i]<mmax&&k[i]==0)
        mmax=d[i],p=i;
    k[p]=1;
    for(int i=v[p].size()-1; i>=0; i--)
      d[v[p][i]]=min(d[v[p][i]],d[p]+w[p][i]);
  }
  for(int i=1; i<=n; i++)
    printf("%d ",d[i]);
}
int main()
{
//  freopen("map.in","r",stdin);
//  freopen("map.out","w",stdout);
  cin>>n>>m>>s;
  int x,y,z;
  while(m--)
  {
    x=read(),y=read(),z=read();
    v[x].push_back(y);
    w[x].push_back(z);
  }
  Dijstra();
  return 0;
}

rt,还没写堆优化。

是不加堆优化过不去任何点,还是我写丑了?

2020/7/27 08:49
加载中...