QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#835061 | #8012. Jumping Lights | Radewoosh# | TL | 47ms | 223132kb | C++17 | 5.5kb | 2024-12-28 09:21:19 | 2024-12-28 09:21:19 |
Judging History
answer
//~ while (clock()<=69*CLOCKS_PER_SEC)
//~ #pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("O3")
//~ #pragma GCC target ("avx2")
//~ #pragma GCC optimize("Ofast")
//~ #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//~ #pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set =
tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define sim template < class c
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifdef LOCAL
~debug() { cerr << endl; }
eni(!=) cerr << boolalpha << i; ris; }
eni(==) ris << range(begin(i), end(i)); }
sim, class b dor(pair < b, c > d) {
ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
*this << "[";
for (auto it = d.b; it != d.e; ++it)
*this << ", " + 2 * (it == d.b) << *it;
ris << "]";
}
#else
sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#define shandom_ruffle random_shuffle
using ll=long long;
using pii=pair<int,int>;
using pll=pair<ll,ll>;
using vi=vector<int>;
using vll=vector<ll>;
const int nax=1000*1007;
int n, q;
int ojc[nax];
vi graf[nax];
int parz[nax];
int ile[2][2];
int stan;
int czyl[nax];
set<pii> zazdz[2][nax];
set<pii> niedz[2][nax];
int zazn[2][nax];
vi swieze[2];
void dfs1(int v)
{
for (int &i : graf[v])
{
if (i==ojc[v])
{
swap(i, graf[v].back());
graf[v].pop_back();
break;
}
}
for (int i : graf[v])
{
ojc[i]=v;
parz[i]=parz[v]^1;
dfs1(i);
}
}
int wynik()
{
return ile[0][stan]+ile[1][stan^1];
}
void flip(int kt, int v)
{
//~ debug() << "flipuje " << imie(kt) << imie(v);
if (zazn[kt][v])
{
ile[kt][parz[v]]--;
zazn[kt][v]=0;
if (v>1)
{
//~ iledz[kt][ojc[v]]--;
zazdz[kt][ojc[v]].erase({!czyl[v], v});
niedz[kt][ojc[v]].insert({!czyl[v], v});
}
}
else
{
ile[kt][parz[v]]++;
zazn[kt][v]=1;
if (v>1)
{
//~ iledz[kt][ojc[v]]++;
zazdz[kt][ojc[v]].insert({!czyl[v], v});
niedz[kt][ojc[v]].erase({!czyl[v], v});
}
}
}
int isfake(int kt, int v)
{
return zazn[kt][v] && parz[v]!=(stan^kt) && !(zazn[kt][ojc[v]]+(int)zazdz[kt][v].size());
}
void rozszerz(int kt)//najpierw usun spojne rozmiaru jeden zlej parzystosci
{
vi dod;
vi pom=swieze[kt];
swieze[kt].clear();
sort(pom.begin(), pom.end());
pom.resize(unique(pom.begin(), pom.end())-pom.begin());
for (int i : pom)
{
if (parz[i]!=(stan^kt))
{
if (isfake(kt, i))
flip(kt, i);
//~ else
//~ swieze[kt].push_back(i);
}
else
{
if (!zazn[kt][i])
{
if (i>1 && isfake(kt, ojc[i]))
flip(kt, ojc[i]);
if (i>1 && !isfake(kt, ojc[i]) && zazn[kt][ojc[i]])
swieze[kt].push_back(i);
while(1)
{
if (zazdz[kt][i].empty())
break;
int d=(*zazdz[kt][i].begin()).second;
if (!isfake(kt, d))
{
swieze[kt].push_back(i);
break;
}
flip(kt, d);
}
//~ swieze[kt].push_back(i);
}
}
}
//~ debug() << imie(kt) << imie(pom);
for (int i : pom)
{
//~ debug() << imie(i) << imie(zazn[kt][i]) << imie(parz[i]==(stan^kt));
if (!zazn[kt][i] && parz[i]!=(kt^stan))//zaraza sie
{
int jest=0;
if (i>1 && zazn[kt][ojc[i]])
{
if (isfake(kt, ojc[i]))
flip(kt, ojc[i]);
else
jest=1;
}
while(!jest && !zazdz[kt][i].empty())
{
int d=(*zazdz[kt][i].begin()).second;
if (isfake(kt, d))
flip(kt, d);
else
jest=1;
}
if (!jest)
continue;
dod.push_back(i);
continue;
}
if (zazn[kt][i] && parz[i]==(kt^stan))//zaraza somsiadow
{
if (i>1 && !zazn[kt][ojc[i]])
dod.push_back(ojc[i]);
for (pii j : niedz[kt][i])
dod.push_back(j.second);
continue;
}
//~ if (zazn[kt][i])
//~ swieze[kt].push_back(i);
}
sort(dod.begin(), dod.end());
dod.resize(unique(dod.begin(), dod.end())-dod.begin());
for (int i : dod)
{
if (!zazn[kt][i])
{
flip(kt, i);
swieze[kt].push_back(i);
}
}
}
int main()
{
scanf("%d%d", &n, &q);
for (int i=1; i<n; i++)
{
int a, b;
scanf("%d%d", &a, &b);
graf[a].push_back(b);
graf[b].push_back(a);
}
for (int i=1; i<=n; i++)
czyl[i]=(((int)graf[i].size())==1);
dfs1(1);
for (int h=0; h<2; h++)
for (int i=2; i<=n; i++)
niedz[h][ojc[i]].insert({!czyl[i], i});
while(q--)
{
int typ;
scanf("%d", &typ);
if (typ<=1)
{
int v;
scanf("%d", &v);
for (int i=0; i<2; i++)
{
if (parz[v]!=(stan^i))
continue;
if (zazn[i][v]!=typ)
{
flip(i, v);
swieze[i].push_back(v);
}
}
}
if (typ==2)
{
rozszerz(0);
rozszerz(1);
stan^=1;
}
printf("%d ", wynik());
//~ debug();
//~ debug() << range(zazn[0]+1, zazn[0]+1+n);
//~ debug() << range(zazn[1]+1, zazn[1]+1+n);
//~ debug() << imie(swieze[0]) << imie(swieze[1]);
//~ debug();
}
printf("\n");
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 39ms
memory: 222928kb
input:
8 8 1 2 2 3 2 4 1 5 5 6 5 7 5 8 1 1 2 2 0 1 0 3 0 4 0 5 2
output:
1 2 6 5 4 3 3 1
result:
ok 8 numbers
Test #2:
score: 0
Accepted
time: 36ms
memory: 220908kb
input:
4 5 1 2 1 3 2 4 1 2 2 0 4 2 2
output:
1 2 1 2 2
result:
ok 5 number(s): "1 2 1 2 2"
Test #3:
score: 0
Accepted
time: 32ms
memory: 219020kb
input:
1000 1000 471 906 653 752 346 148 764 837 22 863 416 906 836 863 784 752 694 346 918 635 963 863 152 863 221 342 473 752 250 635 323 643 102 643 944 833 262 752 185 150 82 342 142 342 383 635 1000 342 30 752 713 837 513 635 12 150 181 346 138 752 661 150 435 342 246 150 387 643 561 635 41 833 797 34...
output:
1 1 2 115 114 118 117 103 102 306 305 396 395 604 603 497 496 810 809 692 691 908 907 695 694 907 906 599 598 906 905 493 492 905 904 492 491 904 903 395 394 903 902 394 393 805 804 393 392 710 709 392 391 709 708 390 389 611 610 389 388 498 497 387 386 402 401 386 385 401 400 298 297 400 399 297 29...
result:
ok 1000 numbers
Test #4:
score: 0
Accepted
time: 34ms
memory: 219288kb
input:
1000 1000 471 906 653 752 346 148 764 837 22 863 416 906 836 863 784 752 694 346 918 635 963 863 152 863 221 342 473 752 250 635 323 643 102 643 944 833 262 752 185 150 82 342 142 342 383 635 1000 342 30 752 713 837 513 635 12 150 181 346 138 752 661 150 435 342 246 150 387 643 561 635 41 833 797 34...
output:
1 2 3 4 4 5 5 501 14 14 15 15 804 804 804 804 803 802 296 296 296 296 296 296 296 907 906 905 904 904 904 904 903 902 903 694 693 693 1000 1000 1000 1000 999 1000 1000 1000 1000 1000 1000 999 998 998 998 1000 1000 1000 1000 1000 1000 999 999 999 999 998 998 997 997 996 1000 1000 1000 1000 1000 1000 ...
result:
ok 1000 numbers
Test #5:
score: 0
Accepted
time: 32ms
memory: 221120kb
input:
1000 1000 381 447 194 664 14 628 379 159 314 696 462 431 288 881 94 715 841 505 356 729 973 447 605 433 370 664 733 785 591 779 961 35 770 294 723 580 924 431 472 606 315 858 612 526 538 638 562 890 241 686 717 611 673 937 25 81 342 269 132 159 97 418 647 58 552 930 962 858 996 219 155 219 446 18 96...
output:
1 1 2 3 2 26 25 71 70 86 85 139 138 143 142 187 186 203 202 265 264 269 268 291 290 334 333 357 356 401 400 426 425 469 468 491 490 535 534 560 559 609 608 625 624 675 674 691 690 736 735 748 747 791 790 817 816 857 856 874 873 924 923 949 948 965 964 954 953 964 963 953 952 946 945 951 950 945 944 ...
result:
ok 1000 numbers
Test #6:
score: 0
Accepted
time: 32ms
memory: 221036kb
input:
1000 1000 152 814 899 864 941 247 562 592 569 194 367 804 691 200 873 445 399 723 487 561 496 194 140 445 840 864 520 445 797 299 601 137 900 561 156 539 580 569 517 851 207 261 891 733 794 299 971 299 216 539 385 613 591 194 602 756 860 569 549 872 543 592 17 191 712 481 150 567 634 884 119 125 731...
output:
1 2 3 4 4 5 6 132 355 354 354 354 539 538 538 539 539 539 637 636 635 635 635 636 636 737 736 735 734 734 734 734 733 733 733 837 836 836 928 928 928 991 990 1000 1000 1000 1000 1000 1000 999 998 998 998 1000 1000 1000 1000 1000 1000 999 999 999 999 998 998 997 997 996 1000 1000 1000 1000 1000 1000 ...
result:
ok 1000 numbers
Test #7:
score: 0
Accepted
time: 47ms
memory: 223132kb
input:
1000 1000 758 194 685 422 288 113 326 351 995 894 493 380 114 487 45 240 280 401 154 801 929 606 113 160 966 275 698 374 833 709 873 936 714 651 536 710 387 699 798 508 678 300 250 194 53 195 453 247 777 552 648 257 223 885 386 711 963 762 277 985 157 238 503 780 910 123 1 272 452 500 619 656 956 29...
output:
1 2 3 4 4 5 9 38 19 19 20 20 49 49 50 51 51 51 55 55 55 55 56 57 58 90 90 90 90 91 92 93 93 93 94 85 85 86 154 155 156 118 118 189 163 164 165 223 214 213 213 214 215 258 259 277 294 295 296 296 297 298 299 299 299 299 300 300 322 343 363 364 400 404 404 403 454 473 473 472 473 484 485 485 484 503 5...
result:
ok 1000 numbers
Test #8:
score: 0
Accepted
time: 23ms
memory: 219012kb
input:
1000 1000 82 12 214 985 154 2 565 243 46 685 542 799 419 269 164 111 723 131 542 181 286 762 691 830 189 909 175 720 325 544 586 357 487 899 727 785 988 284 892 717 841 129 767 512 952 162 313 25 714 226 706 507 621 597 127 574 587 457 107 65 24 667 973 801 910 49 429 559 875 45 868 737 914 359 616 ...
output:
1 2 3 4 4 5 11 22 35 35 36 36 72 72 73 73 73 73 117 116 116 116 117 118 119 205 205 204 203 204 205 206 206 206 207 304 303 304 428 428 429 586 585 729 829 829 829 898 956 955 954 954 955 982 982 994 999 999 999 998 998 998 998 997 997 996 996 995 998 1000 1000 1000 1000 1000 999 998 1000 1000 999 9...
result:
ok 1000 numbers
Test #9:
score: 0
Accepted
time: 28ms
memory: 221024kb
input:
1000 1000 82 12 214 985 154 2 565 243 46 685 542 799 419 269 164 111 723 131 542 181 286 762 691 830 189 909 175 720 325 544 586 357 487 899 727 785 988 284 892 717 841 129 767 512 952 162 313 25 714 226 706 507 621 597 127 574 587 457 107 65 24 667 973 801 910 49 429 559 875 45 868 737 914 359 616 ...
output:
1 1 2 4 3 6 5 6 5 9 8 16 15 26 25 39 38 47 46 60 59 86 85 112 111 153 152 229 228 341 340 452 451 567 566 680 679 810 809 905 904 949 948 975 974 991 990 997 996 998 997 1000 999 998 997 1000 999 998 997 1000 999 998 997 999 998 1000 999 999 998 999 998 998 997 999 998 998 997 998 997 998 997 998 99...
result:
ok 1000 numbers
Test #10:
score: -100
Time Limit Exceeded
input:
300000 1000000 97326 76454 9201 59099 18094 236352 84776 238940 199531 76454 9597 245969 271653 59099 238809 76454 211072 240150 240324 59099 230003 214953 174810 236352 241076 245969 182508 236352 243967 238940 265389 238940 85806 214953 67883 59099 116683 240150 213036 245969 245555 256624 54761 2...
output:
1 1 2 30037 30036 30039 30038 29866 29865 59901 59900 7 6 59903 59902 29817 29816 119829 119828 90006 90005 239884 239883 210295 210294 299995 299994 210294 210293 269879 269878 210293 210292 269878 269877 180225 180224 269877 269876 180224 180223 239987 239986 180223 180222 210157 210156 180222 180...