QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#142635#3996. Racechenxinyang2006WA 1ms5736kbC++142.3kb2023-08-19 15:38:382023-08-19 15:38:40

Judging History

This is the latest submission verdict.

  • [2023-08-19 15:38:40]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 5736kb
  • [2023-08-19 15:38:38]
  • Submitted

answer

#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=(j);i<=(k);i++)
#define per(i,j,k) for(int i=(j);i>=(k);i--)
#define uint unsigned int
#define ll long long
#define ull unsigned long long
#define db double
#define ldb long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define mkp make_pair
#define eb emplace_back
#define SZ(S) (int)S.size()
//#define mod 998244353
//#define mod 1000000007
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
using namespace std;

template <class T>
void chkmax(T &x,T y){
	if(x < y) x = y;
}

template <class T>
void chkmin(T &x,T y){
	if(x > y) x = y;
}

inline int popcnt(int x){
	return __builtin_popcount(x);
}

inline int ctz(int x){
	return __builtin_ctz(x);
}


/*ll power(ll p,int k = mod - 2){
	ll ans = 1;
	while(k){
		if(k % 2 == 1) ans = ans * p % mod;
		p = p * p % mod;
		k /= 2;	
	}
	return ans;
}*/
int n,m,k,q;

int cnt;
int head[200005];
struct eg{
	int to,w,nxt;
}edge[400005];

void make(int u,int v,int w){
	edge[++cnt].to = v;
	edge[cnt].w = w;
	edge[cnt].nxt = head[u];
	head[u] = cnt;
}

int ww[200005][32];
void insert(int id,int val){
	per(i,k - 1,0){
		if(((val >> i) & 1) == 0) continue;
		if(!ww[id][i]){
			ww[id][i] = val;
			return;
		}
		val ^= ww[id][i];
	}
}

int qry(int id,int val){
	per(i,k - 1,0) chkmin(val,val ^ ww[id][i]);
	return val;
}

int vis[200005],dep[200005];
void dfs(int u,int I,int c){
	vis[u] = c;
	for(int i = head[u];i;i = edge[i].nxt){
		int v = edge[i].to;
		if(i == (I ^ 1)) continue;

		if(!vis[v]){
			dep[v] = dep[u] ^ edge[i].w;
//			printf("%d -> %d %d\n",u,v,dep[v]);
			dfs(v,i,c);
		}else{
//			printf("simple cir %d\n",dep[u] ^ dep[v] ^ edge[i].w);
			insert(c,dep[u] ^ dep[v] ^ edge[i].w);
		}
	}
}

int main(){
//	freopen("test.in","r",stdin);
	scanf("%d%d%d%d",&n,&m,&k,&q);
	rep(i,1,m){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		if(w == k) w = (1 << (k - 1)) - 1;
		else w = (1 << (w - 1));
		make(u,v,w);make(v,u,w);
	}

	rep(u,1,n){
		if(vis[u]) continue;
		dfs(u,0,u);
	}

	rep(i,1,q){
		int u,v;
		scanf("%d%d",&u,&v);
		if(vis[u] != vis[v]){
			printf("No\n");
			continue;
		}
		if(!qry(vis[u],dep[u] ^ dep[v])) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 5712kb

input:

7 9 3 4
1 2 1
2 3 1
3 1 2
1 4 3
5 6 2
6 7 1
6 7 3
7 7 2
5 5 1
6 7
1 4
2 4
2 5

output:

Yes
No
Yes
No

result:

ok 4 token(s): yes count is 2, no count is 2

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 5736kb

input:

9 10 3 5
7 2 2
4 2 1
7 1 1
2 8 1
1 7 2
2 7 3
2 8 1
7 2 1
7 5 1
8 1 2
6 4
6 7
8 4
5 1
8 6

output:

No
No
Yes
No
No

result:

wrong answer expected YES, found NO [4th token]