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

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

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

      Educational Codeforces Round 100 (Rated for Div. 2) E. Plan of Lectures 縮點+拓?fù)渑判?/span>

      E. Plan of Lectures

      Ivan is a programming teacher. During the academic year, he plans to give ?? lectures on ?? different topics. Each topic should be used in exactly one lecture. Ivan wants to choose which topic will he explain during the 1-st, 2-nd, ..., ??-th lecture — formally, he wants to choose some permutation of integers from 1 to ?? (let's call this permutation ??). ???? is the index of the topic Ivan will explain during the ??-th lecture.

      For each topic (except exactly one), there exists a prerequisite topic (for the topic ??, the prerequisite topic is ????). Ivan cannot give a lecture on a topic before giving a lecture on its prerequisite topic. There exists at least one valid ordering of topics according to these prerequisite constraints.

      Ordering the topics correctly can help students understand the lectures better. Ivan has ?? special pairs of topics (????,????) such that he knows that the students will understand the ????-th topic better if the lecture on it is conducted right after the lecture on the ????-th topic. Ivan wants to satisfy the constraints on every such pair, that is, for every ??∈[1,??], there should exist some ??∈[1,???1] such that ????=???? and ????+1=????.

      Now Ivan wants to know if there exists an ordering of topics that satisfies all these constraints, and if at least one exists, find any of them.

      Input

      The first line contains two integers ?? and ?? (2≤??≤3?105, 1≤??≤???1) — the number of topics and the number of special pairs of topics, respectively.

      The second line contains ?? integers ??1, ??2, ..., ???? (0≤????≤??), where ???? is the prerequisite topic for the topic ?? (or ????=0 if the ??-th topic has no prerequisite topics). Exactly one of these integers is 0. At least one ordering of topics such that for every ?? the ????-th topic is placed before the ??-th topic exists.

      Then ?? lines follow, the ??-th line contains two integers ???? and ???? (1≤????,????≤??; ????≠????) — the topics from the ??-th special pair. All values of ???? are pairwise distinct; similarly, all valus of ???? are pairwise distinct.

      Output

      If there is no ordering of topics meeting all the constraints, print 0.

      Otherwise, print ?? pairwise distinct integers ??1, ??2, ..., ???? (1≤????≤??) — the ordering of topics meeting all of the constraints. If there are multiple answers, print any of them.

      Examples

      input

      5 2

      2 3 0 5 3

      1 5

      5 4

      output

      3 2 1 5 4

      題意

      有一個人在講課,會講n門課。

      對于每門課i,他必須在第pi門課講完后才能講。其中僅有一門課的pi為0,表示沒有需要提前講的。保證不成環(huán)。

      現(xiàn)在還有k個強條件,每個條件會給xi,yi。表示講第xi門課后的下一節(jié)課必須講第yi門課;保證xi!=xj,yi!=yj。

      問你是否有合法解,有的話就任意輸出一個即可。

      題解

      首先這道題的題意需要理解一下:

      第一個條件相當(dāng)于給了你一棵樹。

      第二個條件給了你若干條鏈或者環(huán),如果存在環(huán)直接輸出非法即可。(一定是鏈或者環(huán),因為xi!=xj,yi!=yj,不會有多個點指向同一個點)。

      然后這道題因為鏈里面的點必須強制按照順序輸出,那么我們直接將鏈進(jìn)行縮點,然后將樹根據(jù)縮點后的結(jié)果變成一個DAG,然后跑一個拓?fù)渑判蛑苯虞敵黾纯伞?/p>

      非法的情況是:強條件中存在環(huán);強條件中順序和樹上順序沖突;形成的DAG里面有環(huán)。

      代碼

      #include<bits/stdc++.h>
      using namespace std;
      const int maxn = 3e5+7;
      vector<int>G[maxn];
      int n,k,fa[maxn],nxt[maxn];
      int L[maxn],id,rnk[maxn],vis[maxn],rt[maxn],R,ind[maxn];
      int main() {
      	cin>>n>>k;
      	for (int i=1;i<=n;i++) {
      		int x;cin>>x;
      		fa[i]=x;
      		if (x==0) R=i;
      	}
      	for (int i=1;i<=k;i++) {
      		int x,y;
      		cin>>x>>y;
      		nxt[x]=y;
      		vis[y]=1;
      	}
      	for (int i=1;i<=n;i++) {
      		if (vis[i]) continue;
      		L[i]=++id;
      		int now=0,x=nxt[i];
      		rnk[i]=now;
      		rt[id]=i;
      		while(x!=0&&L[x]==0) {
      			L[x]=id;
      			rnk[x]=++now;
      			x=nxt[x];
      		}
      	}
      
      	// check circle pass
      	for (int i=1;i<=n;i++) {
      		if (!L[i]) {
      			cout<<"0"<<endl;
      			return 0;
      		}
      		if (L[i]==L[fa[i]]&&rnk[i]<rnk[fa[i]]) {
      			cout<<"0"<<endl;
      			return 0;
      		}
      	}
      
      	for (int i=1;i<=n;i++) {
      		if (fa[i]==0)continue;
      		if (L[fa[i]] != L[i]) {
      			G[L[fa[i]]].push_back(L[i]);
      			ind[L[i]]++;
      		}
      	}
      
      	vector<int> ans;
      	queue<int> Q;
      	for (int i=1;i<=id;i++) {
      		if (ind[i]==0) {
      			Q.push(i);
      		}
      	}
      	while(!Q.empty()) {
      		int now = Q.front();
      		Q.pop();
      		ans.push_back(now);
      		for (int i=0;i<G[now].size();i++) {
      			int v = G[now][i];
      			ind[v]--;
      			if (ind[v]==0) {
      				Q.push(v);
      			}
      		}
      	}
      	if (ans.size()==id) {
      		// for (int i=0;i<ans.size();i++) {
      		//     cout<<"---- " << ans[i]<< " " << rt[ans[i]] << endl;
      		// }
      		for (int i=0;i<ans.size();i++) {
      			int now = rt[ans[i]];
      			int ID = L[rt[ans[i]]];
      			while(now&&ID==L[now]) {
      				cout<<now<<" ";
      				now=nxt[now];
      			}
      		}
      		cout<<endl;
      		return 0;
      	}
      	cout<<"0"<<endl;
      }
      
      posted @ 2020-12-19 01:32  qscqesze  閱讀(255)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产女高清在线看免费观看| 一个人免费观看WWW在线视频| 国产中文字幕日韩精品| 国产揄拍国产精品| 狠狠色噜噜狠狠狠狠2021| 日韩欧美aⅴ综合网站发布| 国产一区二区三区不卡视频| 日本免费精品| 中文字幕av一区二区| 粉嫩国产av一区二区三区| 亚洲精品一区二区区别| 色橹橹欧美在线观看视频高清| 好爽毛片一区二区三区四| 久久精品国产99久久美女| 少妇内射高潮福利炮| 国产av无码专区亚洲av软件| 色噜噜狠狠成人综合| 亚洲热视频这里只有精品| 一本色道久久综合亚洲精品| 把女人弄爽大黄A大片片| 国产情侣激情在线对白| 少妇激情一区二区三区视频小说| 扒开双腿猛进入喷水高潮叫声| 一区二区三区不卡国产| 综合人妻久久一区二区精品| 久久99国产精一区二区三区!| 日本一道一区二区视频| 67194熟妇在线观看线路| 亚洲一区二区三区av激情| 毛葺葺老太做受视频| 少妇xxxxx性开放| 99久久精品国产熟女拳交| 精品国产一区二区三区大| 银川市| 黄色三级亚洲男人的天堂| 亚洲国产一区二区三区久| 色情一区二区三区免费看| 免费A级毛片无码A∨蜜芽试看| 成人性无码专区免费视频| 精品91在线| 日本一区二区三本视频在线观看|