답안 #915085

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
915085 2024-01-23T10:19:10 Z Abito Graph (BOI20_graph) C++14
0 / 100
700 ms 10744 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define F first
#define S second
#define pb push_back
#define ppb pop_back
#define ep insert
#define endl '\n'
#define elif else if
#define pow pwr
#define sqrt sqrtt
#define int long long
#define ll long long
#define y1 YONE
#define free freeee
#define lcm llcm
/*
⠄⠄⠄⠄⢠⣿⣿⣿⣿⣿⢻⣿⣿⣿⣿⣿⣿⣿⣿⣯⢻⣿⣿⣿⣿⣆⠄⠄⠄
⠄⠄⣼⢀⣿⣿⣿⣿⣏⡏⠄⠹⣿⣿⣿⣿⣿⣿⣿⣿⣧⢻⣿⣿⣿⣿⡆⠄⠄
⠄⠄⡟⣼⣿⣿⣿⣿⣿⠄⠄⠄⠈⠻⣿⣿⣿⣿⣿⣿⣿⣇⢻⣿⣿⣿⣿⠄⠄
⠄⢰⠃⣿⣿⠿⣿⣿⣿⠄⠄⠄⠄⠄⠄⠙⠿⣿⣿⣿⣿⣿⠄⢿⣿⣿⣿⡄⠄
⠄⢸⢠⣿⣿⣧⡙⣿⣿⡆⠄⠄⠄⠄⠄⠄⠄⠈⠛⢿⣿⣿⡇⠸⣿⡿⣸⡇⠄
⠄⠈⡆⣿⣿⣿⣿⣦⡙⠳⠄⠄⠄⠄⠄⠄⢀⣠⣤⣀⣈⠙⠃⠄⠿⢇⣿⡇⠄
⠄⠄⡇⢿⣿⣿⣿⣿⡇⠄⠄⠄⠄⠄⣠⣶⣿⣿⣿⣿⣿⣿⣷⣆⡀⣼⣿⡇⠄
⠄⠄⢹⡘⣿⣿⣿⢿⣷⡀⠄⢀⣴⣾⣟⠉⠉⠉⠉⣽⣿⣿⣿⣿⠇⢹⣿⠃⠄
⠄⠄⠄⢷⡘⢿⣿⣎⢻⣷⠰⣿⣿⣿⣿⣦⣀⣀⣴⣿⣿⣿⠟⢫⡾⢸⡟⠄.
⠄⠄⠄⠄⠻⣦⡙⠿⣧⠙⢷⠙⠻⠿⢿⡿⠿⠿⠛⠋⠉⠄⠂⠘⠁⠞⠄⠄⠄
⠄⠄⠄⠄⠄⠈⠙⠑⣠⣤⣴⡖⠄⠿⣋⣉⣉⡁⠄⢾⣦⠄⠄⠄⠄⠄⠄⠄⠄
*/
typedef unsigned long long ull;
using namespace std;
const int N=2e5+5;
int a[N],n,m,e[N][3],val[N];
vector<pair<int,int>> adj[N];
bool vis[N],used[N];
set<int> comp;
void getcomp(int x){
    comp.ep(x);
    vis[x]=true;
    for (auto u:adj[x]){
        if (vis[u.F] || used[u.F]) continue;
        getcomp(u.F);
    }return;
}
void bfs(int s){
    queue<int> q;
    q.push(s);
    vis[s]=true;
    while (!q.empty()){
        int x=q.front();
        q.pop();
        for (auto u:adj[x]){
            if (vis[u.F] || used[u.F]) continue;
            a[u.F]=u.S-a[x];
            vis[u.F]=true;
            q.push(u.F);
        }
    }return;
}
int check(){
    bool ok=true;
    for (int i=1;i<=m;i++){
        if (!comp.count(e[i][0]) || !comp.count(e[i][1])) continue;
        ok&=(a[e[i][0]]+a[e[i][1]]==e[i][2]);
    }
    if (!ok) return LLONG_MAX;
    int s=0;
    for (int i=1;i<=n;i++) s+=abs(a[i]);
    return s;
}
int32_t main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    cin>>n>>m;
    for (int i=1;i<=m;i++){
        for (int j=0;j<3;j++) cin>>e[i][j];
        e[i][2]*=1000000;
        adj[e[i][0]].pb({e[i][1],e[i][2]});
        adj[e[i][1]].pb({e[i][0],e[i][2]});
    }
    int ans=0;
    bool ok=true;
    for (int i=1;i<=n;i++){
        if (used[i]) continue;
        getcomp(i);
        int ansx=LLONG_MAX;
        for (int x=-3e6;x<=3e6;x++){
            for (auto u:comp) vis[u]=false;
            a[i]=x;
            bfs(i);
            int y=check();
            if (y<ansx){
                for (auto u:comp) val[u]=a[u];
                ansx=y;
            }
        }
        //for (int i=1;i<=n;i++) cout<<a[i]<<' ';
        //cout<<endl;
        if (ansx==LLONG_MAX) ok=false;
        else ans+=ansx;
        for (auto u:comp) used[u]=true;
    }
    if (!ok) cout<<"NO"<<endl;
    else{
        cout<<"YES"<<endl;
        for (int i=1;i<=n;i++) cout<<fixed<<setprecision(9)<<val[i]/double(1e6)<<' ';
        cout<<endl;
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 447 ms 10588 KB answer = YES
2 Correct 271 ms 10744 KB answer = YES
3 Correct 373 ms 10588 KB answer = YES
4 Execution timed out 721 ms 10696 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 447 ms 10588 KB answer = YES
2 Correct 271 ms 10744 KB answer = YES
3 Correct 373 ms 10588 KB answer = YES
4 Execution timed out 721 ms 10696 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 447 ms 10588 KB answer = YES
2 Correct 271 ms 10744 KB answer = YES
3 Correct 373 ms 10588 KB answer = YES
4 Execution timed out 721 ms 10696 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 447 ms 10588 KB answer = YES
2 Correct 271 ms 10744 KB answer = YES
3 Correct 373 ms 10588 KB answer = YES
4 Execution timed out 721 ms 10696 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 447 ms 10588 KB answer = YES
2 Correct 271 ms 10744 KB answer = YES
3 Correct 373 ms 10588 KB answer = YES
4 Execution timed out 721 ms 10696 KB Time limit exceeded
5 Halted 0 ms 0 KB -