<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【CF429E】Points and Segments 歐拉回路

      【CF429E】Points and Segments

      題意:給你數軸上的n條線段$[l_i,r_i]$,你要給每條線段確定一個權值+1/-1,使得:對于數軸上的任一個點,所有包含它的線段的權值和只能是+1,-1或0。

      $n\le 10^5$

      題解:首先,我們用掃描線,整個數軸被分成若干個小區(qū)間。對于一個小區(qū)間,如果有偶數條線段包含它,則它的權值只能是0,否則可以是+1/-1。我們可以在所有權值為+1/-1的小區(qū)間處人為的增加一條線段,這樣的話我們只需要讓所有小區(qū)間權值都是0就行了。

      嗯。。。每個小區(qū)間都被偶數個線段包含。。。權值和是0。。。想到什么呢?

      如果我們給線段定向,向右的為+1,向左的為-1,那么我們要求的就是整個圖的歐拉回路!于是dfs求歐拉回路即可!

      細節(jié):如果我們直接建圖跑歐拉回路的話,則一條1-2,2-3的路徑其實是不合法的,因為2實際上被包含了2次,而我們再建圖時相當于直接越過了2這個點。解決方法是將區(qū)間變成左閉右開,即ri++。

       

      #include <cstdio>
      #include <cstring>
      #include <algorithm>
      #include <iostream>
      using namespace std;
      const int maxn=200010;
      struct node
      {
      	int x,k,org;
      }p[maxn];
      int n,m,cnt;
      int last[maxn<<1],to[maxn<<1],nxt[maxn<<1],head[maxn],val[maxn],vis[maxn],used[maxn<<1];
      inline int rd()
      {
      	int ret=0;	char gc=getchar();
      	while(gc<'0'||gc>'9')	gc=getchar();
      	while(gc>='0'&&gc<='9')	ret=ret*10+gc-'0',gc=getchar();
      	return ret;
      }
      bool cmp(const node &a,const node &b)
      {
      	return a.x<b.x;
      }
      inline void add(int a,int b)
      {
      	to[cnt]=b,nxt[cnt]=head[a],head[a]=cnt++;
      }
      void dfs(int x)
      {
      	vis[x]=1;
      	for(int i=head[x];i!=-1;i=nxt[i])	if(!used[i])
      		used[i]=1,used[i^1]=2,dfs(to[i]);
      }
      int main()
      {
      	//freopen("a.in","r",stdin);
      	n=rd();
      	int i;
      	for(i=1;i<=n;i++)	p[i].x=rd(),p[i+n].x=rd()+1,p[i].k=1,p[i+n].k=-1,p[i].org=p[i+n].org=i;
      	sort(p+1,p+2*n+1,cmp);
      	memset(head,-1,sizeof(head));
      	for(i=1;i<=n+n;i++)
      	{
      		if(i==1||p[i].x>p[i-1].x)
      		{
      			m++;
      			if(!(i&1))	add(m-1,m),add(m,m-1);
      		}
      		if(p[i].k==1)	last[p[i].org]=m;
      		else	add(last[p[i].org],m),add(m,last[p[i].org]),last[p[i].org]=cnt-2;
      	}
      	for(i=1;i<=m;i++)	if(!vis[i])	dfs(i);
      	for(i=1;i<=n;i++)	printf("%d ",used[last[i]]&1);
      	return 0;
      }

       

      posted @ 2018-04-05 18:01  CQzhangyu  閱讀(584)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲青青草视频在线播放| 精品无人区卡一卡二卡三乱码| 久久碰国产一区二区三区| 熟女一区| 久久中文字幕一区二区| 福利一区二区不卡国产| 99热这里有精品| 亚洲香蕉免费有线视频| 欧美xxxx精品另类| 亚洲欧美人成电影在线观看| 亚洲精品久久久久国色天香| 久久综合伊人77777| 国产成人a在线观看视频免费| 国产suv精品一区二区883| 国产免费午夜福利在线播放| 久久精品国产亚洲综合av| 国产女人和拘做受视频免费| 亚洲午夜爱爱香蕉片| 国产成人精品中文字幕| 把女人弄爽大黄A大片片| 亚洲AV熟妇在线观看| 国产婷婷综合在线视频中文| 亚洲第一无码AV无码专区| 国产精品青草久久久久福利99| 国产精品一精品二精品三| 日韩精品区一区二区三vr| 国产成人精品久久性色av| 国产成a人片在线观看视频下载 | 人妻中文字幕一区二区视频| 国产美女自慰在线观看| 国产微拍一区二区三区四区| 国内精品久久久久影院网站| 欧美亚洲日本国产综合在线美利坚 | 日韩av中文字幕有码| 国产亚洲精品自在久久蜜TV| 亚洲av一本二本三本| 亚洲国产成人无码影院| 芦山县| 国产精品成人av电影不卡| 日韩中文字幕人妻一区| 无码精品国产va在线观看|