Submission #31290

#TimeUsernameProblemLanguageResultExecution timeMemory
31290imaxbluePipes (BOI13_pipes)C++14
39.75 / 100
616 ms23792 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define mp make_pair #define pb push_back #define x first #define y second #define pii pair<int, int> #define p3i pair<pii, int> #define pll pair<ll, ll> #define p3l pair<pll, ll> #define lseg L, (L+R)/2, N*2+1 #define rseg (L+R)/2+1, R, N*2+2 #define ub upper_bound #define lb lower_bound #define pq priority_queue #define MN 1000000007 #define fox(k, x) for (int k=0; k<x; ++k) #define fox1(k, x) for (int k=1; k<=x; ++k) #define foxr(k, x) for (int k=x-1; k>=0; --k) #define fox1r(k, x) for (int k=x; k>0; --k) #define ms multiset #define flood(x) memset(x, 0x3f3f3f3f, sizeof x) #define drain(x) memset(x, 0, sizeof x) int n, m, a, b, N; ll c[100005], f[500005], k; int in[100005], u[100005]; bool u2[100005]; vector<pii> v[100005], s; queue<int> q; void dfs(int N, int P, int C){ //cout << N << ' ' << C << endl; if (u[N]){ //cout << "*" << endl; if (u[N]==C){ cout << 0 << endl; exit(0); } if (u2[N]) return; s.pb(mp(N, -1)); fox(l, s.size()-1){ u2[s[l].x]=1; c[s[l+1].x]-=c[s[l].x]; f[s[l].y]+=c[s[l].x]; //cout << s[l].y << ' ' << f[s[l].y] << endl; } k=c[s[0].x]/2; fox(l, s.size()-1){ f[s[l].y]+=k; k*=-1; } s.pop_back(); return; } u[N]=C; fox(l, v[N].size()){ if (in[v[N][l].x]==0 || v[N][l].x==P) continue; s.pb(mp(N, v[N][l].y)); dfs(v[N][l].x, N, 3-C); s.pop_back(); } } int main(){ cin >> n >> m; fox1(l, n) cin >> c[l]; fox(l, m){ cin >> a >> b; v[a].pb(mp(b, l)); v[b].pb(mp(a, l)); in[a]++; in[b]++; } fox1(l, n){ if (in[l]==1) q.push(l); } while(!q.empty()){ N=q.front(); q.pop(); if (in[N]==0) continue; in[N]--; fox(l, v[N].size()){ if (in[v[N][l].x]==0) continue; c[v[N][l].x]-=c[N]; f[v[N][l].y]=c[N]; //cout << N << ' ' << v[N][l].y << ' ' << c[N] << endl; in[v[N][l].x]--; if (in[v[N][l].x]==1) q.push(v[N][l].x); } } fox1(l, n){ if (in[l]==0 || u[l]) continue; dfs(l, -1, 1); } fox(l, m){ cout << f[l]*2 << endl; } return 0; }

Compilation message (stderr)

pipes.cpp: In function 'void dfs(int, int, int)':
pipes.cpp:18:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(k, x) for (int k=0; k<x; ++k)
                                  ^
pipes.cpp:42:9: note: in expansion of macro 'fox'
         fox(l, s.size()-1){
         ^
pipes.cpp:18:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(k, x) for (int k=0; k<x; ++k)
                                  ^
pipes.cpp:49:9: note: in expansion of macro 'fox'
         fox(l, s.size()-1){
         ^
pipes.cpp:18:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(k, x) for (int k=0; k<x; ++k)
                                  ^
pipes.cpp:58:5: note: in expansion of macro 'fox'
     fox(l, v[N].size()){
     ^
pipes.cpp: In function 'int main()':
pipes.cpp:18:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(k, x) for (int k=0; k<x; ++k)
                                  ^
pipes.cpp:81:9: note: in expansion of macro 'fox'
         fox(l, v[N].size()){
         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...