Pagini recente » Cod sursa (job #3134610) | Cod sursa (job #78458) | Cod sursa (job #164288) | Cod sursa (job #3278835) | Cod sursa (job #959270)
Cod sursa(job #959270)
#include <stdio.h>
#include <vector>
#define NMax 100010
using namespace std;
const char IN[]="nowhere-zero.in",OUT[]="nowhere-zero.out";
int N,M;
bool b[NMax];
int in[NMax],out[NMax],lv[NMax];
vector<int> ad[NMax];
void solve(int x,int p=0){
b[x]=true;lv[x]=lv[p]+1;
for (int i=0;i<(int)ad[x].size();++i) if (ad[x][i]!=p){
if (!b[ad[x][i]]) solve(ad[x][i],x);
else if (lv[ad[x][i]]<lv[x]){
++out[x];++in[ad[x][i]];
printf("%d %d 1\n",x,ad[x][i]);
}
}
}
void df(int x,int carry=0){
b[x]=true;
for (int i=0;i<(int)ad[x].size();++i) if (!b[ad[x][i]]){
printf("%d %d %d\n",x,ad[x][i],carry+in[x]-out[x]);
df(ad[x][i],carry+in[x]-out[x]);
}
}
void c(){
for (int i=1;i<=N;++i) b[i]=false;
}
int main()
{
int i,x,y;
double a,bb;
freopen(IN,"r",stdin);
scanf("%d%d",&N,&M);
for (i=1;i<=N;++i) scanf("%lf%lf",&a,&bb);
while (M--){
scanf("%d%d",&x,&y);
//printf("%d %d\n",x,y);
ad[x].push_back(y);
ad[y].push_back(x);
}
fclose(stdin);
freopen(OUT,"w",stdout);
for (i=1;i<=N;++i) if (!b[i]) solve(i);
c();
for (i=1;i<=N;++i) if (!b[i]) df(i);
fclose(stdout);
return 0;
}