日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HYSBZ 3991 寻宝游戏

發(fā)布時間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HYSBZ 3991 寻宝游戏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:
小B最近正在玩一個尋寶游戲,這個游戲的地圖中有N個村莊和N-1條道路,并且任何兩個村莊之間有且僅有一條路徑可達。游戲開始時,玩家可以任意選擇一個村莊,瞬間轉(zhuǎn)移到這個村莊,然后可以任意在地圖的道路上行走,若走到某個村莊中有寶物,則視為找到該村莊內(nèi)的寶物,直到找到所有寶物并返回到最初轉(zhuǎn)移到的村莊為止。小B希望評測一下這個游戲的難度,因此他需要知道玩家找到所有寶物需要行走的最短路程。但是這個游戲中寶物經(jīng)常變化,有時某個村莊中會突然出現(xiàn)寶物,有時某個村莊內(nèi)的寶物會突然消失,因此小B需要不斷地更新數(shù)據(jù),但是小B太懶了,不愿意自己計算,因此他向你求助。為了簡化問題,我們認為最開始時所有村莊內(nèi)均沒有寶物
題解:
①有一個比較常見的結(jié)論:
從一個點出發(fā),經(jīng)過指定的k個點再回到原點走的路徑的長度是這k個點構(gòu)成的生成樹的邊權(quán)和的兩倍
②這道題如果把有寶藏的點當作特殊點,就相當于維護m棵虛樹.
③每次重新建虛樹是肯定不行的,每次只會修改一個點,插入和刪除這個點一定會伴隨著若干條路徑的改變,找到這些路徑就好了
④畫圖分析可以知道:
這些路徑一定是當前操作的點x和DFS序在它前面的最后一個點L組成的
或者是和DFS序在它后面的第一個點R組成的
⑴如果L存在,那么這條路徑就是L→x
⑵如果R存在路徑R→x到x也會受到影響
⑶如果L和R同時存在,還要排除L→R的影響
⑷ans還要加上tmp是因為直接加dis會使DFS序最小的點x到DFS序最大的點y這條邊x→y只算了一次,要加上另一次
⑤只需要記住每次加點還是刪點都會改變?nèi)舾蓷l路徑對答案的貢獻,找到這些路徑并修改貢獻就好了.
⑥因為要每次要插入一個DFS序,找前驅(qū)后繼,所以用set來維護

?

#include <cstdio> #include <cstring> #include <algorithm> #include <set> using namespace std; typedef long long LL; const int maxn=100000+10; struct Node{int to,next,data; }a[maxn<<1]; int n,m,head[maxn],cnt; int prt[maxn],deep[maxn],size[maxn],son[maxn]; LL dis[maxn]; int Dfn[maxn],Time,top[maxn],pos[maxn]; bool flag[maxn]; LL ans=0; set<int>S; void Init(); void Insert(int,int,int); void DFS1(int,int,int); void DFS2(int,int); int LCA(int,int); LL Dis(int,int); void Solve_Insert(int); void Solve_Delte(int); int main(){// freopen("in.cpp","r",stdin); Init();return 0; } void Init(){scanf("%d%d",&n,&m);int x,y,z;for(int i=1;i<n;i++){scanf("%d%d%d",&x,&y,&z);Insert(x,y,z);Insert(y,x,z);}DFS1(1,0,1);DFS2(1,1);S.insert(0);S.insert(n+1);while(m--){scanf("%d",&x);flag[x]=!flag[x];if(flag[x])Solve_Insert(x);else Solve_Delte(x);} } void Solve_Insert(int x){int L,R,prt1,prt2;LL tmp=0;S.insert(Dfn[x]);L=*--S.find(Dfn[x]);R=*++S.find(Dfn[x]);if(L>=1)ans+=Dis(pos[L],x);if(R<=n)ans+=Dis(pos[R],x);if(L>=1 && R<=n)ans-=Dis(pos[L],pos[R]);L=*++S.find(0),R=*--S.find(n+1);if(L>=1 && R<=n)tmp=Dis(pos[L],pos[R]);printf("%lld\n",tmp+ans); } void Solve_Delte(int x){int L,R,prt1,prt2;LL tmp=0;L=*--S.find(Dfn[x]);R=*++S.find(Dfn[x]);if(L>=1)ans-=Dis(pos[L],x);if(R<=n)ans-=Dis(pos[R],x);if(L>=1 && R<=n)ans+=Dis(pos[L],pos[R]);S.erase(Dfn[x]);L=*++S.find(0),R=*--S.find(n+1);if(L>=1 && R<=n)tmp=Dis(pos[L],pos[R]);printf("%lld\n",tmp+ans); } void Insert(int x,int y,int z){a[++cnt].to=y;a[cnt].next=head[x];a[cnt].data=z;head[x]=cnt; } #define y a[i].to void DFS1(int x,int prt,int deep){::deep[x]=deep;::prt[x]=prt;::size[x]=1;for(int i=head[x];i;i=a[i].next){if(y==prt)continue;dis[y]=dis[x]+a[i].data;DFS1(y,x,deep+1);size[x]+=size[y];if(size[y]>size[son[x]])son[x]=y;} } void DFS2(int x,int top){::Dfn[x]=++Time;::top[x]=top;::pos[Time]=x;if(son[x])DFS2(son[x],top);for(int i=head[x];i;i=a[i].next){if(y==prt[x] || y==son[x])continue;DFS2(y,y);} } #undef y int LCA(int x,int y){while(top[x]!=top[y]){if(deep[top[x]]<deep[top[y]])swap(x,y);x=prt[top[x]];}if(deep[x]<deep[y])return x;return y; } LL Dis(int x,int y){return dis[x]+dis[y]-2*dis[LCA(x,y)]; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/holy-unicorn/p/9510293.html

總結(jié)

以上是生活随笔為你收集整理的HYSBZ 3991 寻宝游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青青草原影视 | 另类ts人妖一区二区三区 | 538国产精品一区二区 | av影视在线观看 | 大肉大捧一进一出好爽视频动漫 | wwww黄色片| 欧美日韩高清在线观看 | 欧美变态口味重另类 | 久久中文在线 | 一二三区不卡 | 东京热av一区 | 香蕉视频在线播放 | 欧美日本一二三区 | 爱草视频 | 国产综合一区二区 | 热播网| 日韩欧美一区二区三区在线观看 | 欧美手机在线 | eeuss鲁片一区二区三区在线观看 | 情欲超| 欧美精品亚洲一区 | 国产福利一区二区三区视频 | 国产男男gay体育生网站 | 国产精品免费av一区二区三区 | 国产精品无码一区二区桃花视频 | 懂色av色吟av夜夜嗨 | 午夜毛片在线 | 综合天堂av久久久久久久 | 免费在线视频一区 | 青青自拍视频 | 亚洲美女中文字幕 | 国产亚洲精品久久久 | 中文字幕一区二区人妻电影 | 人妻少妇被猛烈进入中文字幕 | 91直接看| 欧美成性色 | 亚洲欧美一区二区在线观看 | 国产精品乱码一区二区三区 | 香蕉视频在线观看免费 | 小毛片在线观看 | 黄页网站在线播放 | 久久久久久久久久久久电影 | 成人免费视频免费观看 | 综合婷婷 | 亚洲日本精品视频 | 亚洲第一免费 | 牛牛影视一区二区三区 | 日日操天天操夜夜操 | 精品国产一区二区三区日日嗨 | 好男人.www| 国产美女一区 | 户外露出一区二区三区 | 欧美午夜小视频 | 日日干日日射 | 日韩中文免费 | 综合一区二区三区 | 成人av在线一区二区 | 无码人妻一区二区三区免费n鬼沢 | 粉嫩av一区二区夜夜嗨 | 国产欧美视频在线观看 | 久久av无码精品人妻系列试探 | www视频在线观看网站 | 日韩在线观看 | 成年女人毛片 | 国产aaa级片 | zzjizzji亚洲日本少妇 | 香蕉黄色片 | 美女扒开屁股让男人捅 | 国产乱码一区二区 | 天天骑夜夜操 | 国产第一页第二页 | 激情吧| 4438激情网 | 久久这里只有精品99 | 日韩性生交大片免费看 | 91精品美女 | 天天色天天干天天色 | 91精品国产综合久久久蜜臀粉嫩 | 亚洲区第一页 | 黄色三及| 天天干人人 | 国产熟女一区二区三区五月婷 | 一区二视频 | www.日韩av | 在线看av的网址 | 成人免费公开视频 | 精品欧美黑人一区二区三区 | 国产在线激情 | 亚洲国产精品久久人人爱 | 色哟哟在线观看视频 | 亚洲高清在线播放 | 涩涩视频在线播放 | 日韩激情免费 | 屁股夹体温计调教play | 国产一区二区三区在线视频观看 | 91久久精品一区二区别 | 成人六区 | 日本黄色片视频 | 欧美在线视频二区 |