低级错误反思
归档于 2019-07-14 06:11
模拟测试72
对拍发现暴力挂了,没改暴力继续拍,直接交了,正解挂成15
对拍是人类进步的阶梯
一定要拍,不拍就挂,
要对自己代码水平心中有b数
要对自己代码习惯心中有b数
模拟测试73
不要相信大样例,大样例对了,你的程序也有可能锅掉,
模拟题千万不要复制粘贴
模拟测试74
set不可重,multiset
模拟测试87
暴力和(伪)正解犯的同一个sb错误0分
不要过于相信对拍
模拟测试87改题
不开multiset见祖宗
(一场挂100)*2



又是过于相信对拍
暴力要重码不要在你打的正解基础上改
模拟测试94
炸内存了
100挂成0
没事不要全开long long
注意空间,
打模拟对拍如果方便重构可以再打一遍,第一遍拍第二遍

少清空一个r
这种错误还在犯

倒是避免了多测不清空………………………………………………..
WA0代码

AC代码

正解挂成0


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 610000
ll head[A],ver[A],nxt[A],edg[A],maxx[A][21],f[A][21],fa[A],dep[A];
ll t,tot,n,m,q;
struct node{
ll x,y,z;
friend bool operator < (const node &a,const node &b){
return a.z<b.z;
}
}e[A];
ll find(ll x){
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void add(ll x,ll y,ll z){
nxt[++tot]=head[x],head[x]=tot,ver[tot]=y;edg[tot]=z;
}
void merge(ll x,ll y){
x=find(x),y=find(y);
if(x!=y){
fa[x]=y;
}
}
ll lca(ll x,ll y){
ll maxn=0;
if(dep[x]>dep[y]) swap(x,y);
for(ll i=t;i>=0;i--){
if(dep[x]<=dep[f[y][i]]){
maxn=max(maxn,maxx[y][i]);
y=f[y][i];
}
if(dep[x]==dep[y]) break;
}
if(x==y) return maxn;
for(ll i=t;i>=0;i--){
if(f[x][i]!=f[y][i]){
maxn=max(maxn,maxx[x][i]);
maxn=max(maxn,maxx[y][i]);
x=f[x][i],y=f[y][i];
}
}
return maxn;
}
void dfs(ll x,ll pre){
for(ll i=head[x];i;i=nxt[i]){
ll y=ver[i];
if(y==pre) continue ;
f[y][0]=x;
maxx[y][0]=edg[i];
dep[y]=dep[x]+1;
dfs(y,x);
}
}
int main(){
freopen("graph.in","r",stdin);
freopen("graph.out","w",stdout);
scanf("%lld%lld%lld",&n,&m,&q);
t=log(n)/log(2)+1;
for(ll i=1;i<=n;i++) fa[i]=i;
for(ll i=1;i<=m;i++){
scanf("%lld%lld%lld",&e[i].x,&e[i].y,&e[i].z);
}
sort(e+1,e+m+1);
for(ll i=1;i<=m;i++){
ll x=e[i].x,y=e[i].y;
x=find(x),y=find(y);
if(x!=y){
merge(x,y);
add(e[i].x,e[i].y,e[i].z);
add(e[i].y,e[i].x,e[i].z);
}
}
f[1][0]=1;dfs(1,0);
for(ll j=1;j<=t;j++){
for(ll i=1;i<=n;i++){
ll now=f[i][j-1];
f[i][j]=f[now][j-1];
maxx[i][j]=max(maxx[now][j-1],maxx[i][j-1]);
}
}
for(ll i=1;i<=q;i++){
ll x,y,xx,yy;
scanf("%lld%lld",&x,&y);
if(find(x)!=find(y)){
printf("-1\n");
}
else {
printf("%lld\n",lca(x,y));
}
}
}
View Code
倍增一定要注意直接与lca相连的边

如果对拍不了一定要静态查错
cnt写成n,