评测机状态emm。。。

P1342 请柬

getchar123 @ 2019-03-02 14:53:31

我觉得这道题可以改为:测人品:把下面的代码交上去,得分越高,人品越好。。。
我交了四次。。。第一次,没开o2,25分,第二次,开了o2,75分,第三次,开了o2,100分,第四次,没开o2,50分。。。
评测机状态真重要。。。

// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int n,m,ver[2][1000001],tail[2],vis[2][1000001];
struct bbbb{
    int next,to;
    long long xx;
}b[2][1000001];
long long dis[2][1000001];
void jb(int x,int y,long long z,int zz){
    tail[zz]++;
    b[zz][tail[zz]].next=ver[zz][x];
    b[zz][tail[zz]].to=y;
    b[zz][tail[zz]].xx=z;
    ver[zz][x]=tail[zz];
    return;
}
priority_queue<pair<long long,int> >q;
void Dijistra(int zz){
    for(int i=1;i<=1000001;i++){
        dis[zz][i]=1e16;
    }
    memset(vis,0,sizeof(vis));
    dis[zz][1]=0;q.push(make_pair(0,1));
    while(q.empty()==false){
        int h=q.top().second;q.pop();
        if(vis[zz][h]==0){
            vis[zz][h]=1;
            for(int i=ver[zz][h];i!=0;i=b[zz][i].next){
                if(dis[zz][h]+b[zz][i].xx<dis[zz][b[zz][i].to]){
                    dis[zz][b[zz][i].to]=dis[zz][h]+b[zz][i].xx;
                    q.push(make_pair(-dis[zz][b[zz][i].to],b[zz][i].to));
                }
            }
        }
    }
    return;
}
int main(){
    cin>>n>>m;
    for(int i=0;i<m;i++){
        int x,y;long long z;
        cin>>x>>y>>z;
        jb(x,y,z,0);
        jb(y,x,z,1);
    }
    Dijistra(0);
    Dijistra(1);
    long long s=0;
    for(int i=1;i<=n;i++){
        s+=dis[0][i]+dis[1][i];
    }
    cout<<s;
    return 0;
}

|