不懂为什么全部RE?
查看原帖
不懂为什么全部RE?
180242
kradcigam楼主2021/8/3 12:06

下面的代码加上 #define int LL 能少RE几个点,很奇怪

#include<bits/stdc++.h>
#define log(a) cerr<<"\033[32m[DEBUG] "<<#a<<'='<<(a)<<" @ line "<<__LINE__<<"\033[0m"<<endl
#define LL long long
#define SZ(x) ((int)x.size()-1)
#define ms(a,b) memset(a,b,sizeof a)
#define F(i,a,b) for(int i=(a);i<=(b);++i)
#define DF(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
inline int read(){char ch=getchar(); int w=1,c=0;
	for(;!isdigit(ch);ch=getchar()) if (ch=='-') w=-1;
	for(;isdigit(ch);ch=getchar()) c=(c<<1)+(c<<3)+(ch^48);
	return w*c;
}
const int N=5e5+10,MOD=1e9+7,C=32;
vector<pair<int,int> >v[N];
int f[N],ans=1;
queue<int>q;
int Quickpow(int x,int y){
	int ans=1;
	for(;y;x=(LL)x*x%MOD,y>>=1)
		if(y&1)ans=(LL)ans*x%MOD;
	return ans;
}
struct Dictionary{
	vector<pair<int,int> >v;
	void Newnode(){
		v.emplace_back(0,0);
	}
	Dictionary(){
		Newnode();
	}
	inline void insert(int x){
		int id=0;
		DF(i,C,0){
			int&y=(x>>i)&1?v[id].second:v[id].first;
			if(!y){
				y=v.size();
				Newnode();
			}id=y;
		}
		// log(v[30].first);log(v[30].second);
		// log(x);
		// log(id);
	}
	int query(int x,int y,int id){
		// cout<<x<<" "<<y<<" "<<id<<" "<<v[id].first<<" "<<v[id].second<<endl;
		if(y<0)return 1;
		if((x>>y)&1){
			return ((v[id].first?query(x,y-1,v[id].first):Quickpow(2,y))+(v[id].second?query(x,y-1,v[id].second):Quickpow(2,y)))%MOD;
			// if(!v[id].first||!v[id].second)return (1<<y);
			// return (query(x,y-1,v[id].first)+query(x,y-1,v[id].second))%MOD;
		}
		if(v[id].first&&v[id].second)return 0;
		if(v[id].first)return query(x,y-1,v[id].first);
		return query(x,y-1,v[id].second);
	}
};
signed main(){
	int n=read(),m=read(),k=read();
	F(i,1,m){
		int x=read(),y=read(),z=read();
		v[x].emplace_back(y,z);
		v[y].emplace_back(x,z);
	}
	ms(f,-1);
	F(i,1,n){
		if(~f[i])continue;
		Dictionary T;
		q.push(i);
		f[i]=0;
		while(q.size()){
			int x=q.front();q.pop();
			// cout<<x<<" "<<f[x]<<endl;
			T.insert(f[x]);
			for(auto[j,k]:v[x]){
				if(((f[x]^k)^f[j])&&(~f[j])){
					// log(f[x]);log(f[i]);
					// log(i);
					puts("0");
					return 0;
				}
				if(~f[j])continue;
				f[j]=f[x]^k;
				q.push(j);
			}
		}
		// log(T.query(k,30,0));
		ans=(LL)ans*T.query(k,C,0)%MOD;
		// log(ans);
	}
	cout<<ans;
	return 0;
}
2021/8/3 12:06
加载中...