Submission #827935

#TimeUsernameProblemLanguageResultExecution timeMemory
827935MohamedAhmed04Graph (BOI20_graph)C++14
100 / 100
108 ms23236 KiB
#include <bits/stdc++.h> using namespace std ; const int MAX = 1e5 + 10 ; int arr[MAX] ; int n , m ; vector< vector< pair<int , int> > >adj(MAX) ; int vis[MAX] ; int a[MAX] , b[MAX] ; int known = -1 ; bool flag = true ; int ans[MAX] ; vector<int>v ; void dfs(int node) { vis[node] = 1 ; v.push_back(a[node] * (-1 * b[node])) ; for(auto &childd : adj[node]) { int child = childd.first , w = childd.second ; if(vis[child]) { if(b[node] + b[child] != 0) { int x = (w - a[node] - a[child]) / (b[node] + b[child]) ; ans[node] = a[node] + x * b[node] ; known = node ; } else if(a[node] + a[child] != w) flag = false ; continue ; } a[child] = w - a[node] , b[child] = -1 * b[node] ; dfs(child) ; } } void dfs2(int node) { vis[node] = 2 ; for(auto &childd : adj[node]) { int child = childd.first , w = childd.second ; if(vis[child] == 2) { if(ans[node] + ans[child] != w) flag = false ; continue ; } ans[child] = w - ans[node] ; dfs2(child) ; } } int main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin>>n>>m ; for(int i = 0 ; i < m ; ++i) { int x , y , z ; cin>>x>>y>>z ; z *= 2 ; adj[x].emplace_back(y , z) ; adj[y].emplace_back(x , z) ; } for(int i = 1 ; i <= n ; ++i) { if(vis[i]) continue ; v.clear() , known = -1 ; b[i] = 1 ; dfs(i) ; if(!flag) return cout<<"NO\n" , 0 ; if(known == -1) { sort(v.begin() , v.end()) ; ans[i] = v[v.size()/2] ; known = i ; } dfs2(known) ; if(!flag) return cout<<"NO\n" , 0 ; } cout<<"YES\n" ; for(int i = 1 ; i <= n ; ++i) cout<<ans[i] / 2.00<<" " ; cout<<"\n" ; return 0 ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...