제출 #31319

#제출 시각아이디문제언어결과실행 시간메모리
31319imaxbluePipes (BOI13_pipes)C++14
100 / 100
383 ms21352 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(zqfmgb, x) for (int zqfmgb=0; zqfmgb<x; ++zqfmgb) #define fox1(zqfmgb, x) for (int zqfmgb=1; zqfmgb<=x; ++zqfmgb) #define foxr(zqfmgb, x) for (int zqfmgb=x-1; zqfmgb>=0; --zqfmgb) #define fox1r(zqfmgb, x) for (int zqfmgb=x; zqfmgb>0; --zqfmgb) #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, C; int c[100005], f[500005], k; int in[100005], u[100005]; vector<pii> v[100005], s; queue<int> q; bool F; void dfs(int N, int P){ //cout << N << ' ' << C << endl; if (u[N]){ //cout << "*" << endl; if (u[N]==C || F){ cout << 0 << endl; exit(0); } F=1; s.pb(mp(N, -1)); fox(l, s.size()-1){ c[s[l+1].x]-=c[s[l].x]; f[s[l].y]+=c[s[l].x]; c[s[l].x]=0; //cout << s[l].x << ' ' << 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; if (P==-1 && u[v[N][l].x]) continue; C=3-C; s.pb(mp(N, v[N][l].y)); dfs(v[N][l].x, N); s.pop_back(); C=3-C; } } int main(){ scanf("%i%i", &n, &m); fox1(l, n) scanf("%i", &c[l]); fox(l, m){ scanf("%i%i", &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]!=1) 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; C=1; F=0; dfs(l, -1); } for (int l=0; l<m; ++l){ f[l]*=2; printf("%i\n", f[l]); } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

pipes.cpp: In function 'void dfs(int, int)':
pipes.cpp:18:49: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(zqfmgb, x) for (int zqfmgb=0; zqfmgb<x; ++zqfmgb)
                                                 ^
pipes.cpp:42:9: note: in expansion of macro 'fox'
         fox(l, s.size()-1){
         ^
pipes.cpp:18:49: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(zqfmgb, x) for (int zqfmgb=0; zqfmgb<x; ++zqfmgb)
                                                 ^
pipes.cpp:49:9: note: in expansion of macro 'fox'
         fox(l, s.size()-1){
         ^
pipes.cpp:18:49: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(zqfmgb, x) for (int zqfmgb=0; zqfmgb<x; ++zqfmgb)
                                                 ^
pipes.cpp:58:5: note: in expansion of macro 'fox'
     fox(l, v[N].size()){
     ^
pipes.cpp: In function 'int main()':
pipes.cpp:18:49: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(zqfmgb, x) for (int zqfmgb=0; zqfmgb<x; ++zqfmgb)
                                                 ^
pipes.cpp:84:9: note: in expansion of macro 'fox'
         fox(l, v[N].size()){
         ^
pipes.cpp:69:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i%i", &n, &m);
                          ^
pipes.cpp:70:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     fox1(l, n) scanf("%i", &c[l]);
                                  ^
pipes.cpp:72:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%i%i", &a, &b);
                              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...