Submission #915157

#TimeUsernameProblemLanguageResultExecution timeMemory
915157AbitoGraph (BOI20_graph)C++14
0 / 100
493 ms428 KiB
#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=8; int a[N],n,m,e[N][3],val[N],comp[N]; vector<pair<int,int>> adj[N]; bool vis[N]; void getcomp(int x,int s){ comp[x]=s; vis[x]=true; for (auto u:adj[x]) if (!vis[u.F]) getcomp(u.F,s); 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]) continue; a[u.F]=u.S-a[x]; vis[u.F]=true; q.push(u.F); } }return; } bool check(int x){ bool y=true; vis[x]=true; for (auto u:adj[x]){ y&=(a[u.F]+a[x]==u.S); if (!y) return 0; if (!vis[u.F]) 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; getcomp(i,i); int ansx=INT_MAX; for (int x=-2e6;x<=2e6;x++){ memset(vis,0,sizeof(vis)); a[i]=x;bfs(i); memset(vis,0,sizeof(vis)); 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; }
#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...