답안 #915173

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
915173 2024-01-23T12:48:46 Z Abito Graph (BOI20_graph) C++17
0 / 100
700 ms 680 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=6;
int a[N],n,m,e[N][3],val[N],comp[N],c=0,vis[N];
vector<pair<int,int>> adj[N];
void getcomp(int x,int s){
    comp[x]=s;
    vis[x]=c;
    for (auto u:adj[x]) if (vis[u.F]!=c) getcomp(u.F,s);
    return;
}
void bfs(int s){
    queue<int> q;
    q.push(s);
    vis[s]=c;
    while (!q.empty()){
        int x=q.front();
        q.pop();
        for (auto u:adj[x]){
            if (vis[u.F]==c) continue;
            a[u.F]=u.S-a[x];
            vis[u.F]=c;
            q.push(u.F);
        }
    }return;
}
bool check(int x){
    bool y=true;
    vis[x]=c;
    for (auto u:adj[x]){
        y&=(a[u.F]+a[x]==u.S);
        if (!y) return 0;
        if (vis[u.F]!=c) y&=check(u.F);
        if (!y) return 0;
    }return y;
}
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 (comp[i]) continue;
        c++;
        getcomp(i,i);
        int ansx=INT_MAX;
        for (int x=-3e6;x<=3e6;x++){
            c++;
            a[i]=x;bfs(i);
            c++;
            //cout<<c<<endl;
            //for (int i=1;i<=n;i++) cout<<a[i]<<' ';cout<<endl;
            bool y=check(i);
            if (!y) continue;
            int s=0;
            for (int i=1;i<=n;i++) s+=abs(a[i])*(comp[i]==i);
            if (s<ansx) {for (int i=1;i<=n;i++) val[i]=a[i];ansx=s;}
        }
        //for (int i=1;i<=n;i++) cout<<a[i]<<' ';
        //cout<<endl;
        if (ansx==INT_MAX) {ok=false;break;}
        else ans+=ansx;
    }
    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 288 ms 444 KB answer = YES
2 Correct 272 ms 432 KB answer = YES
3 Correct 323 ms 432 KB answer = YES
4 Correct 275 ms 344 KB answer = NO
5 Execution timed out 770 ms 680 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 288 ms 444 KB answer = YES
2 Correct 272 ms 432 KB answer = YES
3 Correct 323 ms 432 KB answer = YES
4 Correct 275 ms 344 KB answer = NO
5 Execution timed out 770 ms 680 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 288 ms 444 KB answer = YES
2 Correct 272 ms 432 KB answer = YES
3 Correct 323 ms 432 KB answer = YES
4 Correct 275 ms 344 KB answer = NO
5 Execution timed out 770 ms 680 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 288 ms 444 KB answer = YES
2 Correct 272 ms 432 KB answer = YES
3 Correct 323 ms 432 KB answer = YES
4 Correct 275 ms 344 KB answer = NO
5 Execution timed out 770 ms 680 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 288 ms 444 KB answer = YES
2 Correct 272 ms 432 KB answer = YES
3 Correct 323 ms 432 KB answer = YES
4 Correct 275 ms 344 KB answer = NO
5 Execution timed out 770 ms 680 KB Time limit exceeded
6 Halted 0 ms 0 KB -