2019 acm icpc 西安全國邀請賽 J

2021-09-23 18:31:44 字數 2945 閱讀 8016

2019 acm-icpc 西安全國邀請賽 j

題意:給一棵樹,x(u,v)為uv兩點件所有邊的異或值

求:

結果取模1e9+7

資料範圍:n<=1e5, 邊權w<=1e18

不太正確的思路(樹上啟發式合併):

用map記錄 每個異或值子樹大小

在子節點與父節點合併過程中更新答案

合併時採取啟發式合併

注意對每個子節點更新時需先減去子節點對父節點異或值為0的貢獻,計算結束後再加上

特別的:在計算異或值得時候不需要對map內每個點異或,只需對標記陣列進行異或更新,計算答案時異或標記陣列即可

**

#include

using namespace std;

const

int maxn=

100005

;const

long

long mod=

1e9+7;

long

long ecnt=

1,head[maxn<<1]

;struct edgee[maxn<<1]

;void

add(

long

long u,

long

long v,

long

long w)

long

long siz[maxn]

;int to[maxn]

;long

long jwj[maxn]

,temp;

//jwj為標記陣列

long

long ans=0;

map<

long

long

,long

long

> m[maxn]

;void

dfs(

int x,

int fa)

for(iter=m[to[x]].

begin()

;iter!=m[to[x]].

end(

);iter++

) to[x]

=to[v]

; jwj[x]

=jwj[v]

^w;}

else

for(iter=m[to[v]].

begin()

;iter!=m[to[v]].

end(

);iter++)}

m[to[x]][

0^jwj[x]]+

=siz[v];}

}void

dfs1

(int x,

int fa)

}int

main()

dfs1(1

,0);

dfs(1,

0); cout<

}

以上為5月的我的做法,對樹上問題理解還不夠深刻(雖然現在也不是很深刻),雖然通過了這題,但現在回頭再看這個演算法,仔細考慮會發現用到的空間大小是有問題的,因為對每個點都開了乙個map來存該子樹上由此點開始的所有異或值,空間複雜度是有可能來到 n

2n^2

n2級別的,因此我們重新考慮做法。

由於異或值具有特殊性,如果由同乙個點開始到另外兩個點的鏈上異或值相同,那麼即可以得到這兩個點之間鏈上異或值為0。

由這個特性,我們在第一遍dfs時可以處理出由1號點開始到每個點的異或值,之後第二遍dfs只需用乙個map即可進行計數,計數時只需考慮map裡異或值相同的值即可。

特別的,在向子節點v進行dfs過程中,如果temp為到該點的異或值,siz

[v]siz[v]

siz[v]

為子樹v的大小,那麼我們將 map

[tem

p]map[temp]

map[te

mp] 值修改為 n−s

iz[v

]n-siz[v]

n−siz[

v],並在該點子節點都遍歷完後將 map

[tem

p]map[temp]

map[te

mp] 的值修改為 siz

[x]siz[x]

siz[x]

**也變得簡單清晰明了了很多

#include

using namespace std;

typedef pair<

long

long

,long

long

> p;

long

long siz[

100005

],xx[

100005

],res=

0,mod=

1e9+7;

int n;

vector

e[100005];

unordered_map<

long

long

,long

long

> m;

void

dfs1

(int x)

}void

dfs2

(int x)

m[temp]

+=siz[x];}

intmain()

dfs1(1

);dfs2(1

);cout<

}

2017西安全國邀請賽總結

打完西安邀請賽感覺心有點被打垮了,最近幾天有點頹廢,加之期末不想刷題.思索再三感覺還是應該總結一下.這一次拿了銅獎 參與獎 心有不甘啊,感覺5題是怎麼都有的.一上來我就把兩道簽到題寫了。然後看了一下榜,感覺a,c都是全場題,然後隊友去開了c,我去搞了a推出來發現就是乙個公式,上去交了6次,都是在邊界...

2023年ICPC ACM全國邀請賽 西安 總結

因為學校在西安,所以參加了很多次西安的比賽,但遺憾的是沒有在西安拿過一次牌。這次可能是最後一次參加西安的比賽了,幸運的是湊巧拿到了銅牌。也有不甘吧,可是又能怎麼樣呢,菜是原罪。可能參加完南昌後最要徹底退役了。也許和ec的獎牌無緣了吧。2019年5月27日 雖然參加過那麼多西安賽區,對西工大也很熟悉了...

2019西安邀請賽總結

打鐵了 上來a題我寫的時候過於緊張 以至於慢了好幾分鐘 然後開m 我覺得m就是二分加判斷 出賽場之後一交流確實沒錯,但是我判斷寫的dijistra也不知道 寫錯了 隊友一直在開l zc推錯了規律 最後cly重新按照題目寫了好幾個樣例最後a掉,其實就應該用雜湊儲存集合狀態然後打個表就可以,其實規律題也...