QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#401345 | #6330. XOR Reachable | evirir# | WA | 242ms | 516204kb | C++14 | 2.8kb | 2024-04-28 15:31:56 | 2024-04-28 15:31:56 |
Judging History
answer
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define sz(a) (int)(a.size())
#define all(a) a.begin(),a.end()
#define lb lower_bound
#define ub upper_bound
#define owo ios_base::sync_with_stdio(0);cin.tie(0);
#define INF (ll)(1e18)
#define debug(...) fprintf(stderr, __VA_ARGS__),fflush(stderr)
#define time__(d) for(long blockTime = 0; (blockTime == 0 ? (blockTime=clock()) != 0 : false);\
debug("%s time : %.4fs\n", d, (double)(clock() - blockTime) / CLOCKS_PER_SEC))
typedef long long int ll;
typedef long double ld;
typedef pair<ll,ll> PII;
typedef pair<int,int> pii;
typedef vector<vector<int>> vii;
typedef vector<vector<ll>> VII;
ll gcd(ll a,ll b){if(!b)return a;else return gcd(b,a%b);}
#define int ll
const int MAXN = 1e6;
int szz[MAXN],par[MAXN];
int n,m,k;
int find(int x){
if(par[x] == x)return x;
return par[x] = find(par[x]);
}
stack<pii>stk;
ll cur = 0;
ll eval(ll x){return (x*1LL*(x-1))/2;}
bool unite(int a,int b){
a = find(a);
b = find(b);
if(a==b)return 0;
if(szz[a] > szz[b])swap(a,b);
cur -= eval(szz[a]);
cur -= eval(szz[b]);
szz[b] += szz[a];
par[a] = b;
cur += eval(szz[b]);
stk.push({a,b});
return 1;
}
void reback(){
//assert(!stk.empty());
int a = stk.top().fi;
int b = stk.top().se;
stk.pop();
cur -= eval(szz[b]);
par[a] = a;
szz[b] -= szz[a];
cur += eval(szz[a]);
cur += eval(szz[b]);
}
const int MAXNODE = 1e7;
int ch[2][MAXNODE],nodecnt = 0;
vector<pii>edge[MAXNODE];
vector<int>ansid[MAXNODE];
ll finans[MAXN];
int newnode(){
nodecnt++;
return nodecnt;
}
void add(int v,int cur,int dep,int id){ //add queries
if(dep == -1){
ansid[v].pb(id);
return;
}
int c = (cur&(1<<dep)) > 0;
if(!ch[c][v])ch[c][v] = newnode();
add(ch[c][v],cur,dep-1,id);
}
void addedge(int v,int cur,int dep,pii ed){ //add edges
if(dep == -1)return;
if(k & (1<<dep)){ //edge can be added
int x = (cur&(1<<dep)) > 0; //edge xor with query must equal 0
if(ch[x][v])edge[ch[x][v]].pb(ed);
}
int c = ((cur^k) & (1<<dep)) > 0;
if(ch[c][v])addedge(ch[c][v],cur,dep-1,ed);
}
void dfs(int v){
int cnt = 0;
for(pii e : edge[v])cnt+=unite(e.fi,e.se);
for(int id:ansid[v])finans[id] = cur;
if(ch[0][v])dfs(ch[0][v]);
if(ch[1][v])dfs(ch[1][v]);
for(int i=0;i<cnt;i++)reback(); //reverse the changes
}
#define ll int
int main()
{
owo
cin>>n>>m>>k;
vector<array<int,3>>edges;
for(int i=0;i<m;i++){
int u,v,c;
cin>>v>>u>>c;
edges.pb({v-1,u-1,c});
}
int q;
cin>>q;
for(int i=1;i<=q;i++){
int d;
cin>>d;
add(0,d,29,i);
}
for(int i=0;i<n;i++){
par[i] = i;
szz[i] = 1;
}
for(auto e : edges)addedge(0,e[2],29,{e[0],e[1]});
dfs(0);
for(int i=1;i<=q;i++)cout<<finans[i]<<'\n';
}
詳細信息
Test #1:
score: 100
Accepted
time: 68ms
memory: 478796kb
input:
4 5 5 1 2 17 1 3 4 2 3 20 2 4 3 3 4 5 4 0 7 16 167
output:
2 6 3 0
result:
ok 4 number(s): "2 6 3 0"
Test #2:
score: 0
Accepted
time: 85ms
memory: 478708kb
input:
9 13 488888932 2 7 771479959 3 8 783850182 5 7 430673756 6 8 350738034 4 9 400768807 2 3 83653266 1 2 829786563 5 8 357613791 7 9 579696618 3 7 423191200 3 5 867380255 1 9 907715012 6 9 1033650694 8 498260055 144262908 117665696 848664012 983408133 32610599 478007408 134182829
output:
16 7 5 13 13 16 16 5
result:
ok 8 numbers
Test #3:
score: 0
Accepted
time: 242ms
memory: 515400kb
input:
446 99235 764320136 1 2 467639025 1 39 240791819 1 197 320023434 1 391 968343602 1 116 841220144 1 345 697806443 1 409 489643820 1 339 733516272 1 89 560099922 1 431 722346703 1 433 246809211 1 344 769002876 1 234 597076758 1 178 505730391 1 75 826728597 1 74 14756981 1 63 280238017 1 288 638627144 ...
output:
99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 ...
result:
ok 100000 numbers
Test #4:
score: 0
Accepted
time: 192ms
memory: 511660kb
input:
443 100000 587238331 315 322 662401332 43 315 536337643 315 404 1008807430 140 315 116993236 315 349 456757176 315 421 208121145 222 315 165949374 315 359 652820576 128 315 366321131 219 315 385302776 279 315 758612678 315 369 524221824 315 418 405097334 315 344 159069559 114 315 1020799146 36 315 4...
output:
97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 97903 ...
result:
ok 100000 numbers
Test #5:
score: 0
Accepted
time: 216ms
memory: 512012kb
input:
446 99235 319005349 63 98 45774435 98 419 537824294 55 98 970456100 98 295 177258162 98 148 503686739 98 355 952389094 98 110 672181282 98 113 718706403 98 222 193797576 79 98 367361921 8 98 82995994 13 98 401334976 98 427 695043885 98 366 595065071 98 161 581346320 98 128 792799449 98 178 566239903...
output:
99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 99235 ...
result:
ok 100000 numbers
Test #6:
score: 0
Accepted
time: 241ms
memory: 512912kb
input:
442 100000 203918091 334 408 765591331 65 334 841282977 34 334 774464729 135 334 790897433 118 334 220810832 334 383 37271884 334 357 975552850 334 424 634443624 330 334 811688196 321 334 48524877 280 334 40028159 251 334 193460453 198 334 689798118 146 334 734763167 326 334 899636923 89 334 1067215...
output:
97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 97461 ...
result:
ok 100000 numbers
Test #7:
score: -100
Wrong Answer
time: 233ms
memory: 516204kb
input:
100000 99999 131080539 55331 77587 680598826 74630 82197 773435840 9490 88468 37670073 8680 59512 493328849 38978 96144 563550542 41963 66970 73513321 1494 85761 799508674 11271 31250 1022044318 39311 99039 1054195469 26320 50975 6951442 3560 84539 467850296 32918 83458 159835633 9576 55206 85302837...
output:
15096 14918 15004 14871 15137 14863 15398 15065 15476 15027 15038 14905 15143 15137 15104 15163 15125 15105 15052 15190 15187 15156 14992 15092 15094 15082 14919 14936 15041 15098 15107 14976 14990 15087 15401 14902 15092 15133 15098 15122 14892 15178 15093 15110 15095 15210 14931 15173 14809 15455 ...
result:
wrong answer 2nd numbers differ - expected: '14956', found: '14918'