ABC 373(D-F)

https://atcoder.jp/contests/abc373/tasks

D:

搞不清楚dfs还是bfs真的是有点太抽象(一直在想bfs)。每个点只要访问过就不再访问第二次直接dfs可过。

代码
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define pb push_back
#define pii pair<int,int>
#define mkp make_pair
const int maxn=2e5+10;
vector<pii>E[maxn],G[maxn];
bool vis[maxn];
int dis[maxn];

void dfs(int x){
    if(vis[x])return;
    vis[x]=1;
    for(auto i:E[x]){
        if(!vis[i.first]){
            dis[i.first]=dis[x]+i.second;
            dfs(i.first);
        }
    }
    for(auto i:G[x]){
        if(!vis[i.first]){
            dis[i.first]=dis[x]-i.second;
            dfs(i.first);
        }
    }
    return;
}

signed main(){
    int n,m,k;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int u,v,w;cin>>u>>v>>w;
        E[u].pb(mkp(v,w));
        G[v].pb(mkp(u,w));
    }
    for(int i=1;i<=n;i++)if(!vis[i])dfs(i);
    for(int i=1;i<=n;i++)cout<<dis[i]<<endl;
}

E:

两个二分暴力可过。

代码

F:

posted @ 2024-09-29 19:38  lyrrr  阅读(31)  评论(0)    收藏  举报