Pagini recente » Cod sursa (job #2566238) | Cod sursa (job #2867319) | Cod sursa (job #1011218) | Cod sursa (job #2267103) | Cod sursa (job #738573)
Cod sursa(job #738573)
#include <queue>
#include<stdio.h>
#include <cstring>
using namespace std;
int n,m,e;
vector<int> l[100000];
queue<int> c;
int left[100000],right[100000];
void cupleaza(int u){
int viz[100000],tata[100000],x,a,b,i;
memset(viz,0,sizeof(viz));
memset(tata,-1,sizeof(tata));
if(right[u]!=-1)
return;
c.push(u);
viz[u]=1;
while(c.size()>0){
x=c.front();
c.pop();
for(i=0;i<l[x].size();i++)
if(viz[l[x][i]]==0)
if((left[l[x][i]]!=-1)&&(left[l[x][i]]!=x)){
c.push( left[l[x][i]]);
viz[l[x][i]]=1;
tata[left[l[x][i]]]=x;
}
else{
a=right[x];
right[x]=l[x][i];
left[l[x][i]]=x;
x=tata[x];
while(x!=-1){
b=right[x];
right[x]=a;
left[a]=x;
a=b;
x=tata[x];
}
return;
}
}
printf("\n");
}
int main(){
FILE *f,*g;
int i,x,y;
queue<int> c;
f=fopen("cuplaj.in","r");
fscanf(f,"%d %d %d",&n,&m,&e);
for(i=0;i<e;i++){
fscanf(f,"%d %d",&x,&y);
l[x-1].push_back(y-1);
}
fclose(f);
memset(left,-1,sizeof(left));
memset(right,-1,sizeof(right));
g=fopen("cuplaj.out","w");
for(i=0;i<n;i++)
cupleaza(i);
for(int i=0;i<n;i++)
if(right[i]>=0)
fprintf(g,"%d %d\n",i+1,right[i]+1);
fclose(g);
return 0;
}