10.31T2 點雙聯通分量+預處理前綴+二分答案

2.逛公園I

?(parka)

?

【問題描述】

? ? ??琥珀色黃昏像糖在很美的遠方,思念跟影子在傍晚一起被拉長……
? ? ??小 B 帶著 GF 去逛公園,公園一共有 n 個景點,標號為 1 . . . n。景點之間有 m 條路徑相連。
? ? ??小 B 想選擇編號在一段區間 [l, r] 內的景點來游玩,但是如果這些景點的誘導子圖形成了環,那么 GF 將會不高興。
? ? ? 小 B 給出很多個詢問 [x, y],想讓你求有多少個區間 [l, r] 滿足 x ≤ l, r ≤ y 且不會使 GF不高興。

【輸入】

第一行為兩個整數 n, m,表示景點和路徑的數量。
第 2 . . . m + 1 行每行兩個整數 ui, vi 表示第 i 路徑的兩端。
第 m + 2 行是一個整數 q 表示詢問的個數,接下來 m 行每行兩個整數 xi, yi 表示詢問。

【輸出】

q 行,每行一個整數表示答案。

【樣例輸入】

8 9

1 2

2 3

3 1

4 5

5 6

6 7

7 8

8 4

7 2

3

1 8

1 4

3 8

【樣例輸出】

27

8

19

?

【數據范圍與約定】

對于 30% 的數據,n, m ≤ 100。
對于另外 10% 的數據,n = m + 1。
對于另外 10% 的數據,n = m
對于 100% 的數據,n, m ≤ 3 × 10^5, xi ≤ yi,不存在重邊、自環,不存在一條邊同時存在于兩個不同的簡單環。

提示誘導子圖:

子圖 G′ = (V′, E′),原圖 G = (V, E)。V′ 是 V 的子集,E′ = {(u, v)|u, v ∈V′,(u, v) ∈ E}

?

?

?

?

本人&正解思路:
首先如果中間有個環并且為誘導子圖,那么這個環的所有編號都在這個區間里面,顯然如果我們包含這個環的編號最大最小值,就包括了這個環,如果缺了其中之一都不能說是在區間里面的誘導環

所以我們要先求點雙聯通分量,因為一個點可以在多個環里面

所以我們就可以知道轉化成了這個問題,給定n條線段,每次詢問一個區間中至少多少個子區間是不同時包括n條線段任何一條的左右端點的。

所以我們要考慮對于一個點它最遠能延伸的地方

對于一個位置 i ,如果一條線段的左端點比它小顯然這條線段是不會影響這個點的,因為它大于左端點所以不會覆蓋這個整條線段

所以我們先把線段按左端點進行排序。

我們又知道這個最遠的值Right[i]肯定是左端點比 i 大的某條線段右端點恰好左邊一個的位置,也就是求左端點比 i 大的線段右端點的最小值

顯然如果我們直接枚舉肯定是不行的,所以我們可以倒序枚舉排序后的線段,預處理出第 i 條線段以及之后比它左端點大的線段的右端點的最小值(有點繞)

所以我們在找點 i 的Right[i]的時候我們可以二分排序線段左端點的值,也就是恰好左端點比它大的線段,直接就可以知道右端點最小是多少了

然后就是處理區間L-R的問題了

對于一個區間我們要求所有的合法的子區間,所以我們可以求L,L+1,……R為左端點的合法區間,顯然右端點要么是R,要么是Right[i],所以我們可以二分出或者單調隊列得到這個區間中恰好Right[i]大于R的點Pos

Pos之前的點我們可以通過處理 i 到Right[i]區間長度的前綴和直接O(1)求到,Pos之后顯然合法右端點都是R,可以等差數列做一做,就是答案了。

如果全用單調隊列復雜度可以降到很低

code:

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cmath>
  4 #include<algorithm>
  5 #include<ctime>
  6 #define N 1000005
  7 #define lc (p<<1)
  8 #define rc (p<<1|1)
  9 #define max(i,j) (i>j?i:j)
 10 #define min(i,j) (i<j?i:j)
 11 using namespace std;
 12 int mx[N],mn[N];
 13 int n,m;
 14 struct node {
 15     int u,v;
 16 } e[N];
 17 int first[N],nxt[N],cnt;
 18 void add(int u,int v) {
 19     e[++cnt].u=u;
 20     e[cnt].v=v;
 21     nxt[cnt]=first[u];
 22     first[u]=cnt;
 23 }
 24 struct T {
 25     int l,r,id;
 26     T() {
 27         l=99999999;
 28     }
 29 } Lian[N],q[N];
 30 int low[N],top,bcc,dfn[N],siz[N],sign,stack[N],prt[N];
 31 void tarjan(int x) {
 32     low[x]=dfn[x]=++sign;
 33     stack[++top]=x;
 34     for(int i=first[x]; i; i=nxt[i]) {
 35         int v=e[i].v;
 36         if(v==prt[x])continue;
 37         if(!dfn[v]) {
 38             prt[v]=x;
 39             tarjan(v);
 40             low[x]=min(low[x],low[v]);
 41             if(low[v]>=dfn[x]){
 42                 int nowsiz=0;
 43                 int min0=n+1,max0=0;
 44                 int tmp=0;
 45                 do{
 46                     tmp=stack[top--];
 47                     nowsiz++;
 48                     max0=max(max0,tmp);
 49                     min0=min(min0,tmp);
 50                 }while(tmp!=v);
 51                 if(nowsiz==1)continue;
 52                 min0=min(min0,x);
 53                 max0=max(max0,x);
 54                 Lian[++bcc].l=min0;
 55                 Lian[bcc].r=max0;
 56             }
 57         } else low[x]=min(low[x],dfn[v]);
 58     }
 59 }
 60 bool cmp(const T&a,const T&b) {
 61     return a.l<b.l;
 62 }
 63 long long Right[N],Temp[N],Sum[N];
 64 int read() {
 65     int x=0,f=1;
 66     char c=getchar();
 67     while(!isdigit(c)) {
 68         if(c=='-')f=-1;
 69         c=getchar();
 70     }
 71     while(isdigit(c)) {
 72         x=(x<<3)+(x<<1)+c-'0';
 73         c=getchar();
 74     }
 75     return x*f;
 76 }
 77 long long Min[1000006];
 78 int main() {
 79 //    freopen("10.in","r",stdin);
 80 //    freopen("parka.out","w",stdout);
 81     n=read(),m=read();
 82     for(int i=1; i<=m; i++) {
 83         int a,b;
 84         a=read();
 85         b=read();
 86         add(a,b);
 87         add(b,a);
 88     }
 89     for(int i=1; i<=n; i++) {
 90         if(!dfn[i])tarjan(i);
 91     }
 92     sort(Lian+1,Lian+bcc+1,cmp);
 93     for(int i=1; i<=bcc; i++) {
 94         Temp[i]=Lian[i].l;
 95     }
 96     Min[bcc+1]=n+1;
 97     for(int i=bcc; i>=1; i--) {
 98         Min[i]=min(Min[i+1],Lian[i].r);
 99     }
100     for(int i=1; i<=n; i++) {
101         int pos=lower_bound(Temp+1,Temp+bcc+1,i)-Temp;
102         Right[i]=Min[pos]-1;
103         Sum[i]=Sum[i-1]+(Right[i]-i+1);
104     }
105     int Q;
106     cin>>Q;
107     for(int i=1; i<=Q; i++) {
108         int L,R;
109         L=read(),R=read();
110         int pos=lower_bound(Right+1,Right+n+1,R)-Right;
111         if(pos<=L)pos=L;
112         long long Ans=Sum[pos-1]-Sum[L-1];
113         Ans+=(long long)(R-pos+1)*(long long)(R-pos+2)/2;
114         cout<<Ans<<'\n';
115     }
116     return 0;
117 }

over

轉載于:https://www.cnblogs.com/saionjisekai/p/9883881.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276984.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL學習筆記之存儲過程的編寫

今天寫幾個存儲過程&#xff0c;覺得有這個必要記錄下來&#xff0c;方便以后忘了也好有個備份&#xff0c;都很簡單&#xff0c;高手可以不用看的。一、記錄的插入--region [dbo].[InsertArchive]--------------------------------------------------------------------------…

應用安全-操作系統安全-漏洞修復整理

FTP弱密碼 將FTP服務器的密碼更改為強密碼 vi /etc/vsftpd/vsftpd.conf anonymous_enableNO #禁止匿名登錄 重啟ftp服務 Windows匿名用戶整改參考&#xff1a; https://www.jb51.net/article/135347.htm View CodeSSH弱密碼 修改ssh配置文件&#xff1a; 1.修改iptables 首先要…

【2.0】SpringBoot連接MySql 8.0的url設置

jdbc:mysql://localhost:3306/enterprise?useUnicodetrue&amp&useSSLfalse&amp&characterEncodingUTF-8&amp&serverTimezoneGMT%2B8

Java自定義JSlider UI

Java自定義JSlider UI JSlider作為Swing中提供的滑標組件&#xff0c; 以圖形方式在有界區間內通過移動滑塊來選擇值&#xff0c;滑塊可以顯示主刻度標記和次刻度標記。大量應用于如播放器中的音量設定等領域中。但是JSlider本身提供的UI樣式很單調&#xff0c;不足以滿足用戶的…

Chrome OS 云里霧里

昨天Google發布了ChromeOS&#xff0c;之前有牛人編譯了它的源碼并創建了虛擬機分享出來。具體的BT種子不記得了&#xff0c;有需要的可以搜索一下chromeos-image-999.999.32309.211410-a1.vmdk.bz2。看看哪還有種子可用。文件大概287M左右&#xff0c;解壓后大概7、8百M。當下…

C++基礎學習一(基礎之基礎)

開篇&#xff1a;做了這么多年的軟件&#xff0c;第一次使用博客的方式記錄學習過程&#xff0c;之前都是筆記本&#xff08;都有一摞了&#xff09;&#xff0c;因為之前一直從事的都是.NET的開發工作&#xff0c;對C知之甚少&#xff0c;但一直想了解C這門鼻祖級的語言&#…

二叉樹的遍歷方式

2019獨角獸企業重金招聘Python工程師標準>>> 二叉樹遍歷方式有三種&#xff1a;前序遍歷&#xff0c;中序遍歷&#xff0c;后序遍歷&#xff08;其實還有一個層序遍歷&#xff09; 使用兩種方式來實現三種遍歷&#xff1a; 1. 使用遞歸的方式實現 1&#xff09;&…

非常惡俗地分享一首歌曲(子陵·周郎顧)

歌詞 [hjp3]hjptypesong&player5&filehttp://file.hjbbs.com/ayi/share/mp3/zhoulanggu.mp3&backColor990000&frontColorddddff&autoStarttrue&showDownloadtrue&width310&height20[/hjp3]子陵周郎顧 綠綺輕拂剎那玄冰破&#xff0c; 九霄仙音…

that is why用法

釋義&#xff1a;這就是為什么&#xff0c;因此 Thats why I was getting married. ---《老友記》 第一季 第一集 這就是我為什么結婚的原因。 例句&#xff1a; Mr. Gorbachev, on the other hand, recognized that his sluggish and authoritarian bureaucracy was the worst…

阿里云超算集諦優化GPU異構并行性能:GROMACS

“集諦”是一款內置于阿里云彈性高性能計算(Elastic High Performance Computing&#xff0c;E-HPC)的云上性能監控與分析引擎&#xff0c;支持集群資源利用情況的實時監控和用戶作業運行情況的在線分析。對于采用GPU加速的異構計算應用場景&#xff0c;“集諦”除了監控節點ho…

日本常用網址

1.Yahoo&#xff01;Japan http://www.yahoo.co.jp 2.價格.com http://www.kakaku.com 購買商品前必看的網站&#xff0c;不僅僅是為了得到相對最低的價格信息&#xff0c;更重要的是獲取關于同類商品不同品牌型號的評價和比較。 3.樂天 http://www.rakuten.co.jp 日本最…

MySQl看這一篇就夠了

MySQl看這一篇就夠了 MySQL分享 一、數據庫結構 語句 DDL&#xff08;Data Definition Languages&#xff09;&#xff1a;數據定義語句&#xff0c;常用的語句關鍵字主要包括 create、drop、alter等操作表結構 DML&#xff08;Data Manipulation Language&#xff09;&#xf…

IDEA 實用功能Auto Import:自動優化導包(自動刪除、導入包)

JetBrains公司的intellij Idea堪稱JAVA編程界的蘋果&#xff0c;用戶體驗非常好 下面介紹一下IDEA的一個能顯著提升寫代碼效率的非常好用的功能設置—— Auto Import Auto Import的功能是可以幫助我們自動刪除無用的包Import(未被引用)&#xff0c;以及自動Import填充尚未導入的…

怎么看網站是否被黑防止網站被黑

2019獨角獸企業重金招聘Python工程師標準>>> 網站被黑&#xff0c;打開網站竟然跳轉到博cai網站上去了&#xff0c;一開始以為自己看錯了&#xff0c;多次從百度點擊自己網站進去&#xff0c;還是會跳轉到彩piao網站上&#xff0c;第一反應是自己的網站被黑了&#…

c#事務的使用、示例及注意事項

一、事務的介紹.NET Framework 開發員指南事務是一組組合成邏輯工作單元的操作&#xff0c;雖然系統中可能會出錯&#xff0c;但事務將控制和維護事務中每個操作的一致性和完整性。例如&#xff0c;在將資金從一個帳戶轉移到另一個帳戶的銀行應用中&#xff0c;一個帳戶將一定的…

鏡像服務器文件實時監控同步程序

這是為我們網站解決南北電信網通互聯互通問題而寫的一個程序。 優游中國(www.yooyocn.com)是一個大型旅游門戶網站&#xff0c;提供了資訊&#xff0c;視頻&#xff0c;圖片&#xff0c;博客&#xff0c;論壇等大數據量的業務內容。 為了使全國各地的網友都能夠快速訪問我們的網…

Nginx學習系列二Linux下Nginx實現負載均衡

關于在本地虛擬機(VMware 14)下安裝Linux同時安裝Nginx,請參考Nginx學習系列之搭建環境 1、啟動Nginx 在Nginx安裝成功的前提下,啟動Nginx 已root模式登陸(權限需要),接著找到Nginx的安裝目錄,啟動Nginx,并且指定Nginx啟動所需的配置文件,該文件也在Nginx的安裝目錄下. 2、查看…

FastCGI中文規范

http://fuzhong1983.blog.163.com/blog/static/1684705201051002951763/ . 介紹 FastCGI是對CGI的開放的擴展&#xff0c;它為所有因特網應用提供高性能&#xff0c;且沒有Web服務器API的缺點&#xff08;penalty&#xff09;。 本規范具有有限的&#xff08;narrow&#xff09…

設計模式初學者系列-策略模式 -------為什么總是繼承

設計模式初學者系列&#xff0d;策略模式 -------為什么總是繼承 模板方法的延續 這篇稿子是基于我的前一篇模板方法設計模式之上演繹的&#xff0c;如果沒有閱讀請點擊這里查看&#xff0c;以了解這篇稿子的上下文。 在模板方法設計模式里我舉了一個例子&#xff1a;教育部…

紅米airdots掉了怎么查找_紅米K30 Pro 榮耀V30pro 這兩款手機該怎么選呢?

點擊?玩機數碼君?關注我&#xff0c;加★星標★你好 我是歲月神偷昨天可以說是小米拍手稱快的一天&#xff0c;紅米K30 Pro以2999的超低價成為目前最便宜的驍龍865旗艦&#xff0c;讓友商拍馬難追。友商明眼人都知道說的華為&#xff0c;怎么感覺小米每次發布會也替華為宣傳了…