社区讨论

全RE,大佬求调,一定互关!!(没看到请私信)

P1993小 K 的农场参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mm0h5nyh
此快照首次捕获于
2026/02/24 18:40
2 周前
此快照最后确认于
2026/02/26 10:25
2 周前
查看原帖
RE代码
CPP
#include<bits/stdc++.h>
using namespace std;

const int maxn=11000;
const int inf=0x3f3f3f3f;

int n,m;

struct node{
    int v,w;
    node(){ }
    node(int _v,int _w){
        v=_v;
        w=_w;
    }
};

vector <node> g[maxn];
int dst[maxn];
deque<int> qu;
bool inq[maxn];
int cnt[maxn];


int add(int u,int v,int w){
    g[u].push_back(node(v,w));
}

bool spfa(int u){
    memset(dst,inf,sizeof dst);

    dst[u]=0;
    qu.push_back(u);
    inq[u]=1;
    while(!qu.empty()){
        u=qu.front();
        qu.pop_front();
        if(dst[qu.front()]>dst[qu.back()]){
        	swap(qu.front(),qu.back());
        }
        inq[u]=0;
        for(int i=0;i<g[u].size();i++){
            int v=g[u][i].v;
            int w=g[u][i].w;
            if(dst[v]>dst[u]+w){
                dst[v]=dst[u]+w;
                if(!inq[v]){
                	if(dst[v]<dst[qu.front()]){
                    	qu.push_front(v);
                    }else{
                    	qu.push_back(v);
                    }
                    inq[v]=1;
                    cnt[v]++;
                    if(cnt[v]>n){
                    	return 0;	
                    }
                }
            }
        }
    }
    return 1;
}


int main(){
    cin >> n >> m;
     for(int i=1;i<=n;i++){
        add(0,i,0);
    }
    for(int i=0;i<m;i++){
        int d,a,b,c;
        cin >> d;
        if(d==1){
            cin >>a>>b>>c;
            g[a].push_back(node(b,-c));
        }else if(d==2){
            cin >>a>>b>>c;
            g[b].push_back(node(a,c));
        }else{
            cin >>a>>b;
            g[a].push_back(node(b,0));
            g[b].push_back(node(a,0));
        }
    }
    
   
    if(spfa(0)){
    	cout << "Yes";
    }else{
    	cout << "No";
    }
    return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...