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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LOJ bitset+分块 大内存毒瘤题

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LOJ bitset+分块 大内存毒瘤题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題面



$ solution: $

真的沒有想到可以用分塊。

但是可以發現一個性質,每個詢問只關心這個點最后一次賦值操作,和這個賦值操作后的所有取 $ min $ 操作。這個感覺很有用,但是真的很難讓人想到低于 $ n\times m $ 的做法?;?$ DAG $ 的數據結構是目前很少需要掌握的(好吧我都不知道有什么數據結構可以維護 $ DAG $ )所以肯定得騷操作。

我們可以發現一個 $ DAG $ 的性質,如果有一連串賦值操作我們可以根據拓撲序 $ O(n) $ 將所有操作完成,直接按順序從后往前賦值,這樣每個點賦值之后就不會再被訪問。同理的, 如果有一連串取 $ min $ 操作我們也可以根據拓撲序 $ O(n) $ 將所有操作完成,直接 $ min $ 值從小到大取 $ min $, 這樣每個點在取 $ min $ 之后就不會再被訪問。但是當我們將這兩種操作合到一起時就不行了。

但是聯想一下上面說的性質:每個詢問只關心這個點最后一次賦值操作,和這個賦值操作后的所有取 $ min $ 操作。我們可以搞出一個分塊來,先預處理2操作,將2操作序列分塊,并將每一塊用上面的方法統計出每個結點在每個塊內的取 $ min $ 后的值(初值inf)。然后我們就可以 $ \sqrt{n} $ 的求出任意一個區間里某個節點取 $ min $ 的最小值(其實還需要一個操作)。然后我們只需要快速找到每個詢問的節點的最后一次賦值操作的編號,即賦值的大小,就可以得到答案。找到這個編號,我們可以對1操作分塊來完成。

但是上述操作我們還需要知道一個東西,因為分塊兩邊的小區間是要暴力遍歷的,這個我們需要知道每個操作能否對某個點產生影響,這個等同于我們要知道 $ DAG $ 中一個點能否到另一個點。這個很奇妙的我們可以用 $ bitset $ 暴力完成。因為這個是無法用低于 $ n\times m $ 的復雜度完成,但是只涉及能否我們可以用二進制。

  • 仔細分析求得答案需要什么關鍵信息
  • 對于一連串操作可以一次完成,就考慮分治或分塊
  • 對于兩種操作會互相影響,考慮先預處理一種操作在進行第二種操作
  • 二進制和是與否,這個對于復雜度優化很好用。
  • $ DAG $ 中的一些問題是難以用低于 $ n\times m $ 的做法完成的!


  • $ code: $

    #include<iostream> #include<cstdio> #include<iomanip> #include<algorithm> #include<cstring> #include<cstdlib> #include<ctime> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<bitset>#define ll long long #define db double #define rg register intusing namespace std;int tt,t=1; int n,m,q,ff; int a[100005]; int idx[100005]; int fq[100005]; int fm[100005][404]; int vis[100005]; bitset<100005> f[100005];struct su{int to,next; }b[200005]; int tou[100005];struct pi{int id,x,v,op;inline bool operator <(const pi &i)const{return v<i.v;} }s[100005],k[100005];inline int qr(){register char ch; register bool sign=0; rg res=0;while(!isdigit(ch=getchar()))if(ch=='-')sign=1;while(isdigit(ch))res=res*10+(ch^48),ch=getchar();if(sign)return -res; else return res; }inline void yu(int i){ //預處理dag中兩點是否可達vis[i]=1; f[i][i]=1;for(rg j=tou[i];j;j=b[j].next){if(!vis[b[j].to]) yu(b[j].to);f[i]|=f[b[j].to];} }inline void dfs(int i,int v,int time,bool op){ //修改操作if(vis[i]==t)return ; else vis[i]=t; //根據op判斷是1操作還是2操作if(op) a[i]=v,idx[i]=time; else fm[i][time]=v;for(rg j=tou[i];j;j=b[j].next){if(vis[b[j].to]==t)continue;dfs(b[j].to,v,time,op);} }int main(){//freopen("dag.in","r",stdin);//freopen("dag.out","w",stdout);n=qr(); m=qr(); q=qr(); ff=sqrt(q-1)+1;for(rg i=1;i<=q;++i) fq[i]=(i-1)/ff+1; //分塊for(rg i=1;i<=m;++i){rg x=qr(),y=qr();b[i]=su{y,tou[x]}; tou[x]=i;}for(rg i=1;i<=n;++i) if(!vis[i])yu(i);for(rg i=1;i<=q;++i){ //先預處理每個塊內的2操作rg op=qr(); s[i]=pi{i,qr(),0,op};if(op<=2) s[i].v=qr();if(op==2) k[++tt]=s[i];if(fq[i]!=fq[i+1]){sort(k+1,k+tt+1); ++t; //從小到大,保證每個點只修改一次for(rg j=1;j<=n;++j) fm[j][fq[i]]=1e9; //賦初值for(rg j=1;j<=tt;++j)dfs(k[j].x,k[j].v,fq[i],0);tt=0;}}for(rg i=1;i<=q;++i){if(s[i].op==3){rg x=s[i].x,y=idx[x],v=a[x],sf=0;for(rg j=i;fq[j]==fq[i];--j){ //在同一個塊內,暴力處理if(s[j].op==1&&f[s[j].x][x]){ sf=1; y=j; v=s[j].v;for(rg o=y;o<=i;++o)if(s[o].op==2&&f[s[o].x][x]) v=min(v,s[o].v);break;}}if(!sf){ //這個if調了半個上午for(rg j=y+1;fq[j]==fq[y];++j) //前小塊if(s[j].op==2&&f[s[j].x][x]) v=min(v,s[j].v);for(rg j=fq[y]+1;j<=fq[i]-1;++j) v=min(v,fm[x][j]); //中間的大塊for(rg j=i;fq[j]==fq[i];--j) //后小塊if(s[j].op==2&&f[s[j].x][x]) v=min(v,s[j].v);}printf("%d\n",v);}if(fq[i]!=fq[i+1]){ ++t; //將這個塊內的1操作一遍做完for(rg j=i;fq[j]==fq[i];--j)if(s[j].op==1)dfs(s[j].x,s[j].v,j,1);}}return 0; }

    轉載于:https://www.cnblogs.com/812-xiao-wen/p/11505436.html

    總結

    以上是生活随笔為你收集整理的LOJ bitset+分块 大内存毒瘤题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 激情免费网站 | 日本免费网| 加勒比精品在线 | 日韩一级二级三级 | 欧美日韩在线视频一区二区三区 | 欧美日韩电影一区二区 | a天堂视频在线观看 | 成人免费福利 | 欧美黑人激情 | 人妻精品一区一区三区蜜桃91 | 日本熟妇色xxxxx日本免费看 | 麻豆av一区二区三区久久 | 岛国大片在线免费观看 | 99九九视频 | 骚色综合 | 182午夜视频| 精品无码久久久久 | 天堂色综合 | 爱情岛论坛亚洲品质自拍视频 | aaa大片十八岁禁止 中文字幕亚洲在线观看 | 三级黄视频 | 好吊一区二区三区视频 | 亚洲1页 | 日韩中文字幕在线一区 | 久久视频免费观看 | 暖暖av在线| 国产精品夫妻 | 国产乱国产 | 日韩激情电影在线 | 日批免费在线观看 | 老太脱裤让老头玩ⅹxxxx | 亚洲AV午夜成人片 | 午夜aa| 久久精品这里 | 国产精品久久久久久久久久久久午夜片 | 性色av浪潮| 国产高清精品在线观看 | 三级av片| 无码一区二区三区在线观看 | www.久久久久久久久久 | 91久久爱| 美女吞精视频 | 色婷婷av一区二区三区软件 | 91精品国产色综合久久不卡粉嫩 | 国产一线天粉嫩馒头极品av | 中文精品在线 | 在线播放毛片 | 草碰在线视频 | 在线观看成人免费 | 亚洲永久免费观看 | 妞干网av| 免费在线黄网 | 在线观看你懂的网站 | 美女脱裤子让男人捅 | 日韩有码第一页 | 国产毛片毛片毛片毛片 | 国产一级特黄a高潮片 | 免费黄色小视频网站 | 国产黑丝在线播放 | 亚欧美色图 | 天天操夜夜操夜夜操 | 国产乱在线 | 女性女同性aⅴ免费观女性恋 | 久久精品色欲国产AV一区二区 | av免费看网站| 国产调教在线观看 | 色多多污污 | 婷婷干 | 美女网站视频在线观看 | 天天爱天天舔 | 日本三级黄色大片 | 久色资源 | 亚洲精品三 | 性欧美在线观看 | 久热这里只有精品在线 | 国产精品久久久久久99 | 日韩精品导航 | 国产精品二区一区二区aⅴ 一卡二卡三卡在线观看 | 日韩伦乱 | 免费在线性爱视频 | 日本不卡视频一区二区三区 | 艳妇臀荡乳欲伦交换h漫 | 亚洲一区亚洲二区 | 国产99对白在线播放 | 97se亚洲 | 亚洲精品乱码久久久久 | 人妻互换 综合 | 欧美午夜不卡 | 白石茉莉奈中文字幕在 | 国产美女永久免费无遮挡 | 黄色生活毛片 | 国产中文字幕一区 | 午夜激情综合 | 国产suv精品一区二区68 | 免费观看国产精品 | 久久免费少妇高潮99精品 | www.色偷偷 | 亚洲午夜精品视频 | 97在线视频人妻无码 |