Submission #287845

#TimeUsernameProblemLanguageResultExecution timeMemory
287845nandonathanielGraph (BOI20_graph)C++14
100 / 100
184 ms14304 KiB
#include<bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int MAXN=100005,INF=1e9,LOG=90; pii nilai[MAXN]; vector<pii> adj[MAXN]; double point[MAXN]; void gagal(){ cout << "NO\n"; exit(0); } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int n,m,u,v,w; cin >> n >> m; for(int i=1;i<=m;i++){ cin >> u >> v >> w; adj[u].push_back({v,w}); adj[v].push_back({u,w}); } for(int i=1;i<=n;i++){ nilai[i].first=INF; nilai[i].second=INF; } for(int i=1;i<=n;i++){ if(nilai[i].first!=INF)continue; //linear equation vector<int> V; queue<int> Q; Q.push(i); nilai[i]={1,0}; //x and const double X=(double)INF; while(!Q.empty()){ int now=Q.front(); V.push_back(now); Q.pop(); for(auto nxt : adj[now]){ if(nilai[nxt.first]==make_pair(INF,INF)){ nilai[nxt.first]={-nilai[now].first,nxt.second-nilai[now].second}; Q.push(nxt.first); } else{ if(nilai[now].first+nilai[nxt.first].first==0 && nilai[now].second+nilai[nxt.first].second!=nxt.second)gagal(); if(nilai[now].first+nilai[nxt.first].first!=0){ double xnow=((double)nxt.second-((double)nilai[now].second+(double)nilai[nxt.first].second))/((double)nilai[now].first+(double)nilai[nxt.first].first); if(X==INF)X=xnow; else if(xnow!=X)gagal(); } } } } if(X!=INF){ for(auto isi : V)point[isi]=X*(double)nilai[isi].first+(double)nilai[isi].second; continue; } vector<int> candidate; for(auto isi : V){ if(nilai[isi].first==-1)candidate.push_back(nilai[isi].second); else candidate.push_back(-nilai[isi].second); } sort(candidate.begin(),candidate.end()); //x yang membuat sigma(ax+b) terkecil adalah median dari pembuat nol semua persamaan mutlak X=candidate[V.size()/2]; if(V.size()%2==0)X=(double)(X+candidate[V.size()/2-1])/2.0; for(auto isi : V)point[isi]=X*(double)nilai[isi].first+(double)nilai[isi].second; } cout << "YES\n"; for(int i=1;i<=n;i++){ cout << fixed << setprecision(6) << point[i]; if(i<n)cout << ' '; else 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...