題意:給你乙個樹,問你樹的路徑異或和為1的路徑樹。
wa了n次,後來dfs換成了另一種方式過了,再後來發現是自己忘記了rk陣列,還是不夠熟練,理解也不夠深,後來換成自己的方式過了, 附上兩個**。
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int n=30005;
struct node
edge[n*2];
map ma;
int in[n],out[n];
int head[n],cnt,tim,a[n];
pair q[n];
void add(int u,int v ,int w)
void dfs(int u,int pre,int w)
out[u]=tim;
}#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1|1
int sum[n<<2],lazy[n<<2];
void up(int rt)
void down(int rt,int l,int r)
}void build(int l,int r,int rt)
int mid=(l+r)>>1;
build(ls);
build(rs);
up(rt);
}void update(int l,int r,int l,int r,int rt)
int mid=(l+r)>>1;
down(rt,l,r);
if(mid>=l) update(l,r,ls);
if(midint main()
for(int i=1;iscanf("%s%s%d",u,v,&w);
int id1=ma[(string)u],id2=ma[(string)v];
add(id1,id2,w);
add(id2,id1,w);
q[i]=make_pair(id1,id2);
}dfs(1,0,0);
build(2,n,1);
printf("case #%d:\n",cas);
int qq;
scanf("%d",&qq);
while(qq--)}}
}//11
//11
//a//b
//c//d
//e//f
//g//h
//i//j
//k//a b 1
//a c 1
//b d 1
//b e 0
//e h 1
//h i 0
//i j 1
//j k 0
//c f 0
//c g 1
//10
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int n=30005;
struct node
edge[n*2];
map ma;
int in[n],out[n];
int rk[n];
int head[n],cnt,tim,a[n];
pair q[n];
void add(int u,int v ,int w)
void dfs(int u,int pre)
}out[u]=tim;
}#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1|1
int sum[n<<2],lazy[n<<2];
void up(int rt)
void down(int rt,int l,int r)
}void build(int l,int r,int rt)
int mid=(l+r)>>1;
build(ls);
build(rs);
up(rt);
}void update(int l,int r,int l,int r,int rt)
int mid=(l+r)>>1;
down(rt,l,r);
if(mid>=l) update(l,r,ls);
if(midint main()
for(int i=1;iscanf("%s%s%d",u,v,&w);
int id1=ma[(string)u],id2=ma[(string)v];
add(id1,id2,w);
add(id2,id1,w);
q[i]=make_pair(id1,id2);
}a[1]=0;
dfs(1,0);
build(2,n,1);
for(int i=1;iint uu=q[i].first,vv=q[i].second;
if(in[uu]else q[i].first=uu;
}printf("case #%d:\n",cas);
int qq;
scanf("%d",&qq);
while(qq--)}}
}//11
//11
//a//b
//c//d
//e//f
//g//h
//i//j
//k//a b 1
//a c 1
//b d 1
//b e 0
//e h 1
//h i 0
//i j 1
//j k 0
//c f 0
//c g 1
//10
dfs序 線段樹
傳送門 現有一棵樹,有以下操作 1.節點x及其所有子孫顏色都變更為k。2.要求你回答節點x的顏色。初始所有點都沒有染色。input 第一行乙個整數t t 10 表示樣例組數。對於每個測試樣例 第一行乙個整數n n 5e4 表示樹的節點個數。接下來n行,每行兩個整數u,v 1 u,v n 表示樹中u的...
HDU snacks (線段樹 dfs序)
problem description input 輸入資料第一行是乙個整數,表示有組測試資料。對於每組資料,包含兩個整數,表示有個零食機,次操作。接下來行,每行兩個整數和,表示編號為的零食機與編號為的零食機相連。接下來一行由個數組成,表示從編號為0到編號為的零食機的初始價值。接下來行,有兩種操作 ...
求和(dfs序 線段樹)
題意 已知有n個節點,有n 1條邊,形成乙個樹的結構。給定乙個根節點k,每個節點都有乙個權值,節點i的權值為vi 給m個操作,操作有兩種型別 1 a x 表示將節點a的權值加上x 2 a 表示求a節點的子樹上所有節點的和 包括a節點本身 題解 dfs序 線段樹 用dfs序確定in x 和out x ...