3 4 5WA掉 想请问下我这个DFS问题在哪
查看原帖
3 4 5WA掉 想请问下我这个DFS问题在哪
371861
filament楼主2024/7/20 16:13
#include <cstdio>
#include <queue>
#include <deque>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#define lld long long 
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0); 
#define vec vector 
const int N = 2e4+9;
using namespace std;

//用邻接表和邻接矩阵存图=
int n,din[N],dout[N],m;
int ddin[N],ddout[N];
struct node{
    int v,val;
};
vec<node>e[N];
lld G[109][109];
lld a[N],U[N];
bool vis[N];
vec<int>tp;
void put(){
    cin>>n>>m;
    for(int i=1;i<=n;++i)
        cin>>a[i]>>U[i],a[i]-=U[i];
    for(int i=1;i<=m;++i){
        int u,v,val;
        cin>>u>>v>>val;
        e[u].push_back({v,val});
        G[u][v]=val;
        din[v]++,dout[u]++;
    }
    for(int i=1;i<=n;++i){
        ddin[i]=din[i];
        ddout[i]=dout[i];
    }
}
void topo(){
    queue<int>q;
    for(int i=1;i<=n;++i)
        if(din[i]==0) q.push(i);
    while(!q.empty()){
        int head = q.front();
        q.pop();
        tp.push_back(head);
        for(int j=0;j<e[head].size();++j){
            int y = e[head][j].v;
            if(--din[y]==0) q.push(y);
        }
    }

}
void dfs(){
    for(int i=0 ; i<=tp.size()-1 ; ++i){
        int u = tp[i];
        for(int j=1 ; j<=n ; ++j){
            if(G[u][j] != 0){
                a[j] += G[u][j] * a[u];
            }
                
        }
    }
    for(int i=1 ; i<=n ; ++i){
        if(a[i]>0 && ddin[i]!=0 && ddout[i]==0){
            printf("%d %lld\n",i,a[i]);
        }
    }
}
int main(){
    ios;
    put();
    topo();
    dfs();
    return 0;
}
2024/7/20 16:13
加载中...