# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
77285 | tmwilliamlin168 | Pipes (BOI13_pipes) | C++14 | 116 ms | 54500 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
//are lls needed?
#define ll long long
const int mxN=1e5;
int n, m, eu[mxN], ev[mxN], d[mxN], qu[mxN-1], qt, nx[mxN];
ll a[mxN], b[mxN];
vector<int> adj[mxN];
void fk() {
cout << 0;
exit(0);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
if(m>n)
fk();
for(int i=0; i<n; ++i)
cin >> a[i];
for(int i=0; i<m; ++i) {
cin >> eu[i] >> ev[i], --eu[i], --ev[i];
adj[eu[i]].push_back(i);
adj[ev[i]].push_back(i);
++d[eu[i]];
++d[ev[i]];
}
for(int i=0; i<n; ++i)
if(d[i]==1)
qu[qt++]=i;
for(int qh=0; qh<n-1; ++qh) {
if(qh>=qt) {
if((n^qh)&1^1)
fk();
int u=-1, l=-1;
while(!d[++u]);
ll s1=0;
for(int v=u, w, s2=1; v!=u||l==-1; l=nx[v], v=w, s2=-s2) {
// cout << "h2 " << v << endl;
for(int e : adj[v]) {
nx[v]=e;
w=v^eu[e]^ev[e];
if(d[w]&&e!=l)
break;
}
s1+=s2*a[v];
// cout << s1 << " " << nx[v] << endl;
}
b[l]=s1;
for(int v=u, w; nx[v]!=l; v^=eu[nx[v]]^ev[nx[v]])
b[nx[v]]=s1=2*a[v]-s1;
a[0]=0;
break;
}
int u=qu[qh];
// cout << "h1 " << u << endl;
for(int e : adj[u]) {
int v=u^eu[e]^ev[e];
if(!d[v])
continue;
b[e]=2*a[u];
a[v]-=a[u];
if(--d[v]==1)
qu[qt++]=v;
break;
}
d[u]=0;
}
if(a[qu[n-1]])
fk();
for(int i=0; i<m; ++i)
cout << b[i] << "\n";
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |