#include using namespace std; #define MAX 50004 #define INF 1000000000 typedef vector vi; struct node { int ini,fin,id; node(){} node(int pini,int pfin,int pid):ini(pini),fin(pfin),id(pid){} bool operator <(const node& x) { if(ini!=x.ini) return ini vDM; vector vEC; vector > g; int ans[MAX]; bool visit[MAX]; //int parents_count[MAX]; int counter[MAX]; char let[MAX]; int cor[MAX][3]; void dfsDM(int countDM,int countEC); void dfsEC(int countEC,int countDM) { if(countEC u if(color[u] == 0) // If the node u has not been discovered.. dfs_visit(u); // Visit node u } color[v] = 2; // Node v is now processed sorted.push_back(v); // Add the processed node v } void topsort(int n) { color = vi(n, 0); // No node has been discovered sorted.clear(); // Clean the topological sort array for(int i = 0; i < n; i++) // For each node i.. if(color[i] == 0) // If the node i has not been discovered.. dfs_visit(i); // Visit the connected component reverse(sorted.begin(),sorted.end()); // Reverse the array } void dfs(int x) { //cout<>t; while(t--) { cin>>m>>n; vDM=vector(); vEC=vector(); g=vector >(n); for(int j=0;j<3;j++) for(int i=0;i>let[i]; else cin>>cor[i][j]; } for(int i=0;i=cor[i][1]) vDM.push_back(node(cor[i][1],cor[i][2],i)); } else { if(cor[i][2]>=cor[i][1]) vEC.push_back(node(cor[i][1],cor[i][2],i)); } } sort(vDM.begin(),vDM.end()); sort(vEC.begin(),vEC.end()); //cout<1) cout<<" "; cout<<(ans[i]==INF?-1:ans[i]); } cout<<"\n"; /*for(int i=0;i