样例不过提交居然AC?
查看原帖
样例不过提交居然AC?
633466
LiaoYF1楼主2023/3/10 22:32

样例一直输出11,然后试着交了一发居然过了 谁告诉我为什么。

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int n,m,cnt,head[1000005],nxt[5000005],to[5000005],a[1000005],vis[1000005],dis[1000005];
void add(int u,int v,int w){
    to[++cnt]=v;
    nxt[cnt]=head[u];
    head[u]=cnt;
    a[cnt]=w;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        add(i,i+n,-a[i]);
        add(i+n,i+2*n,a[i]);
    }
    for(int i=1;i<=m;i++){
        int u,v,op;
        cin>>u>>v>>op;
        if(op==1){
            add(u,v,0);
            add(u+n,v+n,0);
            add(u+2*n,v+2*n,0);
        }else{
            add(u,v,0);add(v,u,0);
            add(u+n,v+n,0);
            add(u+2*n,v+2*n,0);
            add(v+n,u+n,0);
            add(v+2*n,u+2*n,0);
        }
    }
    for(int i=1;i<=3*n;i++)dis[i]=-2147483647;
    queue<int> q;
    q.push(1);
    vis[1]=1;
    dis[1]=0;
    while(!q.empty()){
        int u=q.front();
        q.pop();
        vis[u]=0;
        for(int i=head[u];i;i=nxt[i]){
            int v=to[i];
            if(dis[v]<dis[u]+a[i]){
                dis[v]=dis[u]+a[i];
                if(!vis[v]){
                    vis[v]=1;
                    q.push(v);
                }
            }
        }
    }
    //cout<<dis[2*n];
    cout<<dis[3*n];
    return 0;
}
2023/3/10 22:32
加载中...