This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <unordered_map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <climits>
#include <iomanip>
using namespace std;
#define MOD 1000000007
#define fir first
#define sec second
#define mp make_pair
#define pushf push_front
#define pushb push_back
#define popf pop_front
#define popb pop_back
#define all(a) a.begin(), a.end()
#define FOR(i, s, e) for(int i = s; i < e; i++)
#define RFOR(i, s, e) for(int i = e-1; i >= s; i--)
#define REP(i, n) FOR(i, 0, n)
#define RREP(i, n) RFOR(i, 0, n)
#pragma GCC optimize(" unroll-loops")
#pragma gcc optimize("Ofast")
#pragma GCC optimization("Ofast")
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<char> vc;
typedef vector<string> vs;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<vi> vvi;
typedef vector<vll> vvll;
typedef vector<vb> vvb;
typedef vector<vc> vvc;
typedef vector<vpii> vvpii;
typedef vector<vpll> vvpll;
typedef queue<int> qi;
typedef queue<ll> qll;
typedef queue<pii> qpii;
typedef queue<pll> qpll;
typedef deque<int> dqi;
typedef deque<ll> dqll;
typedef deque<pii> dqpii;
typedef deque<pll> dqpll;
typedef priority_queue<int> pqi;
typedef priority_queue<ll> pqll;
typedef priority_queue<pii> pqpii;
typedef priority_queue<pll> pqpll;
typedef priority_queue<int, vi, greater<int> > r_pqi;
typedef priority_queue<ll, vll, greater<ll> > r_pqll;
typedef priority_queue<pii, vpii, greater<pii> > r_pqpii;
typedef priority_queue<pll, vpll, greater<pll> > r_pqpll;
vi child[2][2003];
int n, m, a, r, s, root[2], f[2003][2003];
void dfs1(int u) {
for(auto v : child[0][u]) {
REP(i, n) {
f[v][i] += f[u][i];
}
dfs1(v);
}
}
void dfs2(int u) {
for(auto v : child[1][u]) {
REP(i, n) {
f[i][v] += f[i][u];
}
dfs2(v);
}
}
int main() {
scanf("%d%d", &n, &m);
REP(i, n) {
REP(j, 2) {
scanf("%d", &a);
if(a == 0) root[j] = i;
else child[j][--a].push_back(i);
}
}
REP(i, m) {
scanf("%d%d", &r, &s);
f[--r][--s]++;
}
dfs1(root[0]);
dfs2(root[1]);
REP(i, n) {
printf("%d\n", f[i][i]);
}
return 0;
}
Compilation message (stderr)
spy.cpp:31: warning: ignoring '#pragma gcc optimize' [-Wunknown-pragmas]
31 | #pragma gcc optimize("Ofast")
|
spy.cpp:32: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
32 | #pragma GCC optimization("Ofast")
|
spy.cpp:30:37: warning: bad option '-f unroll-loops' to pragma 'optimize' [-Wpragmas]
30 | #pragma GCC optimize(" unroll-loops")
| ^
spy.cpp:70:16: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
70 | void dfs1(int u) {
| ^
spy.cpp:79:16: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
79 | void dfs2(int u) {
| ^
spy.cpp:88:10: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
88 | int main() {
| ^
spy.cpp: In function 'int main()':
spy.cpp:89:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
89 | scanf("%d%d", &n, &m);
| ~~~~~^~~~~~~~~~~~~~~~
spy.cpp:92:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
92 | scanf("%d", &a);
| ~~~~~^~~~~~~~~~
spy.cpp:99:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
99 | scanf("%d%d", &r, &s);
| ~~~~~^~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |