# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
244142 | 2020-07-02T16:34:06 Z | MatesV13 | Zagrade (COI17_zagrade) | C++11 | 2921 ms | 1048580 KB |
#include <bits/stdc++.h> using namespace std; long long n, a, b, ans; char z[300005]; vector<int> c[300005]; multiset<int> zag[2][300005]; void help(int idx){ cout << "Obraduje se " << idx << endl; cout << "0: ("; for (multiset<int>::iterator it=zag[0][idx].begin(); it!=zag[0][idx].end(); it++) cout << *it << " "; cout << ")" << endl; cout << "1: ("; for (multiset<int>::iterator it=zag[1][idx].begin(); it!=zag[1][idx].end(); it++) cout << *it << " "; cout << ")" << endl; cout << "Trenutni ans je " << ans << endl << endl; } void solve(int idx, int par){ for (int i=0; i<c[idx].size(); i++) if (c[idx][i]!=par) solve(c[idx][i], idx); int vrsta; if (z[idx]=='(') vrsta=1; else vrsta=-1; /* for (int i=0; i<c[idx].size(); i++){ for (multiset<int>::iterator it=zag[0][c[idx][i]].begin(); it!=zag[0][c[idx][i]].end(); it++) for (int j=i+1; j<c[idx].size(); j++){ ans+=(1LL*zag[1][c[idx][j]].count(*it+vrsta)); } for (multiset<int>::iterator it=zag[1][c[idx][i]].begin(); it!=zag[1][c[idx][i]].end(); it++) for (int j=i+1; j<c[idx].size(); j++){ ans+=(1LL*zag[0][c[idx][j]].count(*it+vrsta)); } } */ for (int i=0; i<c[idx].size(); i++){ for (multiset<int>::iterator it=zag[1][c[idx][i]].begin(); it!=zag[1][c[idx][i]].end(); it++){ if ((*it)+vrsta>=0) zag[1][idx].insert((*it)+vrsta); } } for (int i=0; i<c[idx].size(); i++){ for (multiset<int>::iterator it=zag[0][c[idx][i]].begin(); it!=zag[0][c[idx][i]].end(); it++){ if ((*it)+vrsta<=0) zag[0][idx].insert((*it)+vrsta); } } ans+=zag[1][idx].count(0)+ zag[0][idx].count(0); for (multiset<int>::iterator it=zag[0][idx].begin(); it!=zag[0][idx].end(); it++) if (*it!=vrsta and *it!=0) ans += zag[1][idx].count(-(*it-vrsta)); if (vrsta==1) zag[1][idx].insert(1); else zag[0][idx].insert(-1); // help(idx); return; } int main (){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i=1; i<=n; i++) cin >> z[i]; for (int i=1; i<n; i++){ cin >> a >> b; c[a].push_back(b); c[b].push_back(a); } solve(1, 0); cout << ans; return 0; } /* 6 ((())) 1 2 2 3 3 4 4 5 5 6 3 (() 1 3 2 3 */
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 29 ms | 35840 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 2921 ms | 1048580 KB | Execution killed with signal 9 (could be triggered by violating memory limits) |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 29 ms | 35840 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |