#include<bits/stdc++.h>
using namespace std;
using ll = long long;
map < ll, ll > mur_xor, bagana_xor;
map < ll, ll > mur_xor_cnt, bagana_xor_cnt;
map < pair < ll, ll > , ll > val;
ll F(ll x, ll y) {
return x * y;
}
ll S(ll x, ll y) {
return x + y;
}
int main() {
ll n, m, r, x, y, i, j, ans, t, N, K, murxor, baganaxor, value, P, x1, y1, x2, y2, c;
cin >> N >> K >> P;
mur_xor_cnt[0] = N;
bagana_xor_cnt[0] = N;
for (i = 1; i <= K; i ++) {
cin >> x1 >> y1 >> c;
val[make_pair(x1, y1)] = c;
mur_xor_cnt[mur_xor[x1]] --;
bagana_xor_cnt[bagana_xor[y1]] --;
mur_xor[x1] ^= c;
bagana_xor[y1] ^= c;
mur_xor_cnt[mur_xor[x1]] ++;
bagana_xor_cnt[bagana_xor[y1]] ++;
}
ans = N * N;
for (auto R : mur_xor_cnt) {
ans = ans - F(R.second, bagana_xor_cnt[R.first]);
// cout << R.first << " " << R.second << " " << ans << endl;
}
// for (auto R : bagana_xor_cnt) {
// ans = ans - min(R.second, mur_xor_cnt[R.first]);
// }
//cout << ans <<"RR" <<endl;
for (i = 1; i <= P; i ++) {
cin >> x1 >> y1 >> x2 >> y2;
value = val[make_pair(x1, y1)];
murxor = mur_xor[x1];
baganaxor = bagana_xor[y1];
// if ( murxor == baganaxor) ans --;
mur_xor_cnt[mur_xor[x1]] --;
bagana_xor_cnt[bagana_xor[y1]] --;
ans = ans + S(mur_xor_cnt[baganaxor], bagana_xor_cnt[murxor]);
// if ( murxor == baganaxor) ans --;
// if (murxor != baganaxor) ans = ans + S(mur_xor_cnt[baganaxor], bagana_xor_cnt[baganaxor]);
// cout << ans << " ";
mur_xor[x1] ^= value;
bagana_xor[y1] ^= value;
murxor = mur_xor[x1];
baganaxor = bagana_xor[y1];
// if ( murxor == baganaxor) ans ++;
ans = ans - S(mur_xor_cnt[baganaxor], bagana_xor_cnt[murxor]);
mur_xor_cnt[mur_xor[x1]] ++;
bagana_xor_cnt[bagana_xor[y1]] ++;
val[make_pair(x1, y1)] = 0;
// if ( murxor == baganaxor) ans --;
// if (murxor != baganaxor) ans = ans - S(mur_xor_cnt[baganaxor], bagana_xor_cnt[baganaxor]);
// cout << ans << " ";
murxor = mur_xor[x2];
baganaxor = bagana_xor[y2];
// if ( murxor == baganaxor) ans --;
mur_xor_cnt[mur_xor[x2]] --;
bagana_xor_cnt[bagana_xor[y2]] --;
ans = ans + S(mur_xor_cnt[baganaxor], bagana_xor_cnt[murxor]);
// if ( murxor == baganaxor) ans ++;
// if (murxor != baganaxor) ans = ans + S(mur_xor_cnt[baganaxor], bagana_xor_cnt[baganaxor]);
// cout << ans << " ";
mur_xor[x2] ^= value;
bagana_xor[y2] ^= value;
val[make_pair(x2, y2)] = value;
murxor = mur_xor[x2];
baganaxor = bagana_xor[y2];
// if ( murxor == baganaxor) ans ++;
ans = ans - S(mur_xor_cnt[baganaxor], bagana_xor_cnt[murxor]);
mur_xor_cnt[mur_xor[x2]] ++;
bagana_xor_cnt[bagana_xor[y2]] ++;
// if ( murxor == baganaxor) ans --;
// if (murxor != baganaxor) ans = ans - S(mur_xor_cnt[baganaxor], bagana_xor_cnt[baganaxor]);
cout << ans << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |