답안 #1110451

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1110451 2024-11-09T13:18:47 Z LucasLe Graph (BOI20_graph) C++17
0 / 100
2 ms 6480 KB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
 
using namespace std;
 
typedef pair <int , int> pii;
 
const int maxn = 2e5 + 7;
 
int n , m;
double ans[maxn];
vector <pii> g[maxn];
bool vis[maxn];
pair <double , double> val[maxn];
 
vector <int> node;
bool conf;
double found;
 
 
void dfs(int u , int p)
{
    vis[u] = 1;
    node.push_back(u);
    for(pii tmp: g[u])
    {
 
        int v = tmp.fi;
        int w = tmp.se;
 
        if(v == p) continue;
 
        if(!vis[v])
        {
            val[v].fi = -1*val[u].fi;
            val[v].se = w - val[u].se;
            dfs(v , u);
        }
        else if(val[v].fi == val[u].fi)
        {
            conf = 1; 
            found = (1.0*(w - val[v].se - val[u].se)/2.0)*val[v].fi;
        }
    }
}
 
void solve()
{
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        int u , v , w; 
        cin >> u >> v >> w;
        g[u].push_back({v , w});
        g[v].push_back({u , w});
    }
 
 
    for(int i = 1; i <= n; i++)
    {
        if(!vis[i])
        {
            node.clear();
            conf = 0; 
 
            val[i].fi = 1.0;
            val[i].se = 0.0;
 
            dfs(i , 0);
 
            if(conf == 0)
            {
                vector <int> v;
                for(int u: node) 
                {
                    v.push_back(val[u].se);
                    v.push_back(val[u].se*-1.0);
                }
                sort(v.begin() , v.end());
 
                found = v[((int)(v.size()) - 1)/2];
 
                //cout << found << '\n';
            }
 
            for(int u: node) 
            {
                ans[u] = found*val[u].fi + val[u].se;
            }
        }
    }
 
    for(int u = 1; u <= n; u++)
    {
        for(pii tmp: g[u])
        {
            int v = tmp.fi;
            int w = tmp.se;
 
            if(ans[u] + ans[v] != w)
            {
                cout << "NO" << '\n';
                return;
            }
        }
    }
 
    cout << "YES" << '\n';
 
    for(int u = 1; u <= n; u++) cout << ans[u] << ' ';
}
 
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    //freopen("sol.inp" ,"r" , stdin);
    //freopen("sol.out" , "w" , stdout);
    solve();
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 6480 KB answer = YES
2 Correct 2 ms 6480 KB answer = YES
3 Correct 2 ms 6480 KB answer = YES
4 Correct 2 ms 6480 KB answer = NO
5 Correct 2 ms 6480 KB answer = YES
6 Incorrect 2 ms 6480 KB participant answer is larger than the answer of jury
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 6480 KB answer = YES
2 Correct 2 ms 6480 KB answer = YES
3 Correct 2 ms 6480 KB answer = YES
4 Correct 2 ms 6480 KB answer = NO
5 Correct 2 ms 6480 KB answer = YES
6 Incorrect 2 ms 6480 KB participant answer is larger than the answer of jury
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 6480 KB answer = YES
2 Correct 2 ms 6480 KB answer = YES
3 Correct 2 ms 6480 KB answer = YES
4 Correct 2 ms 6480 KB answer = NO
5 Correct 2 ms 6480 KB answer = YES
6 Incorrect 2 ms 6480 KB participant answer is larger than the answer of jury
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 6480 KB answer = YES
2 Correct 2 ms 6480 KB answer = YES
3 Correct 2 ms 6480 KB answer = YES
4 Correct 2 ms 6480 KB answer = NO
5 Correct 2 ms 6480 KB answer = YES
6 Incorrect 2 ms 6480 KB participant answer is larger than the answer of jury
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 6480 KB answer = YES
2 Correct 2 ms 6480 KB answer = YES
3 Correct 2 ms 6480 KB answer = YES
4 Correct 2 ms 6480 KB answer = NO
5 Correct 2 ms 6480 KB answer = YES
6 Incorrect 2 ms 6480 KB participant answer is larger than the answer of jury
7 Halted 0 ms 0 KB -