#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=-2500000;x<=2500000;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) {swap(val,a);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 |
242 ms |
348 KB |
answer = YES |
2 |
Correct |
214 ms |
344 KB |
answer = YES |
3 |
Correct |
275 ms |
428 KB |
answer = YES |
4 |
Correct |
230 ms |
424 KB |
answer = NO |
5 |
Incorrect |
622 ms |
424 KB |
participant answer is larger than the answer of jury |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
242 ms |
348 KB |
answer = YES |
2 |
Correct |
214 ms |
344 KB |
answer = YES |
3 |
Correct |
275 ms |
428 KB |
answer = YES |
4 |
Correct |
230 ms |
424 KB |
answer = NO |
5 |
Incorrect |
622 ms |
424 KB |
participant answer is larger than the answer of jury |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
242 ms |
348 KB |
answer = YES |
2 |
Correct |
214 ms |
344 KB |
answer = YES |
3 |
Correct |
275 ms |
428 KB |
answer = YES |
4 |
Correct |
230 ms |
424 KB |
answer = NO |
5 |
Incorrect |
622 ms |
424 KB |
participant answer is larger than the answer of jury |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
242 ms |
348 KB |
answer = YES |
2 |
Correct |
214 ms |
344 KB |
answer = YES |
3 |
Correct |
275 ms |
428 KB |
answer = YES |
4 |
Correct |
230 ms |
424 KB |
answer = NO |
5 |
Incorrect |
622 ms |
424 KB |
participant answer is larger than the answer of jury |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
242 ms |
348 KB |
answer = YES |
2 |
Correct |
214 ms |
344 KB |
answer = YES |
3 |
Correct |
275 ms |
428 KB |
answer = YES |
4 |
Correct |
230 ms |
424 KB |
answer = NO |
5 |
Incorrect |
622 ms |
424 KB |
participant answer is larger than the answer of jury |
6 |
Halted |
0 ms |
0 KB |
- |