为什么将scanf改成快读就过了
错误代码
#include <cstdio>
#include <vector>
#include <iostream>
#define ll long long
using namespace std;
inline ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-f;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
vector<pair<int, ll>> mp[500010];
int n, m;
ll f[500010];
void dfs(int u, int fa, ll sum) {
f[u] = sum;
for(int i = 0; i < mp[u].size(); i++) {
int v = mp[u][i].first;
ll w = mp[u][i].second;
if(v == fa) continue;
dfs(v, u, sum ^ w);
}
}
int main() {
ll u, v, w;
scanf("%d%d", &n, &m);
for(int i = 1; i < n; i++) {
scanf("%lld%lld%lld", &u, &v, &w);
mp[u].push_back(make_pair(v, w));
mp[v].push_back(make_pair(u, w));
}
dfs(1, 1, 0);
for(int i = 1; i <= m; i++) {
scanf("%lld%lld%lld", &u, &v, &w);
if((f[u] ^ f[v]) == w) printf("Yes\n");
else printf("No\n");
}
return 0;
}
正确代码
#include <cstdio>
#include <vector>
#include <iostream>
#define ll long long
using namespace std;
inline ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-f;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
vector<pair<int, ll>> mp[500010];
int n, m;
ll f[500010];
void dfs(int u, int fa, ll sum) {
f[u] = sum;
for(int i = 0; i < mp[u].size(); i++) {
int v = mp[u][i].first;
ll w = mp[u][i].second;
if(v == fa) continue;
dfs(v, u, sum ^ w);
}
}
int main() {
ll u, v, w;
scanf("%d%d", &n, &m);
for(int i = 1; i < n; i++) {
u = read(); v = read(); w = read();
mp[u].push_back(make_pair(v, w));
mp[v].push_back(make_pair(u, w));
}
dfs(1, 1, 0);
for(int i = 1; i <= m; i++) {
u = read(); v = read(); w = read();
if((f[u] ^ f[v]) == w) printf("Yes\n");
else printf("No\n");
}
return 0;
}