求助 !!本机ac 提交全是tle
查看原帖
求助 !!本机ac 提交全是tle
11713
296966943lzy楼主2020/9/14 21:59

写了好久,一直都是tle还全是1.2s,连最小的点也是1.2。为啥啊?```cpp #include<bits/stdc++.h> using namespace std; inline int read() { int X=0,w=1; char c=getchar(); while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); } while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar(); return X*w; } struct ss { int x,y,v,next; }e[500010]; int n,m,s; int Link[100010],k=0; long long dis[100010]; inline void insert(int xx,int yy,int vv) { e[++k].x=xx;e[k].y=yy;e[k].v=vv; e[k].next=Link[xx]; Link[xx]=k; } struct node { long long u,d; bool operator <(const node& rhs) const{return d>rhs.d;} }; priority_queueQ; inline int dj(int st) { for (int i=0;i<=n;++i) dis[i]=100000000000ll; dis[st]=0; node minpoint; minpoint.u=st;minpoint.d=0; Q.push(minpoint); while(Q.size()) { minpoint=Q.top();Q.pop(); int u=minpoint.u,d=minpoint.d; if (dis[u]!=d) continue ; //cout<<u<<' '<<d<<endl; //if (d!=dis[u]) continue; for(int j=Link[u];j;j=e[j].next)//用最近的点来更新其他点的最近距离 {//保证了前一步找最近的点时找到的就是该点的最短路 if(dis[e[j].y]>d+e[j].v) { dis[e[j].y]=d+e[j].v; Q.push((node){e[j].y,dis[e[j].y]}); } } //minpoint=Q.top();Q.pop(); //u=minpoint.u,d=minpoint.d; //cout<<u<<' '<<d<<endl; }

} int main() { //int jk=clock(); n=read();m=read();s=read(); for(int i=1,xx,yy,vv;i<=m;++i) { xx=read();yy=read();vv=read(); insert(xx,yy,vv); } /for(int i=1;i<=n;i++) { cout<<i<<':'<<endl; for(int j=Link[i];j;j=e[j].next) { cout<<" -"<<e[j].y<<':'<<e[j].v<<endl; } }/ dj(s); //cout<<n<<endl; for (int i=1;i<=n;++i) printf("%lld ",dis[i]); //cout<<clock()-jk<<endl; return 0; }

2020/9/14 21:59
加载中...