Pagini recente » Cod sursa (job #350770) | Cod sursa (job #1099172) | Cod sursa (job #3121816) | Cod sursa (job #2240578) | Cod sursa (job #2558323)
#include <iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#define nmax 200001
#define mmax 400001
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct ab{
int a, b, c;
bool vizz = false;
};
struct gr{
int nod, indice;
};
int n, m, cost_min = 0, nr_muchii = 0;
vector<gr> graf[nmax];
vector<ab>muchii;
vector<int>viz;
bool cmp(ab x, ab y){
return (x.c < y.c);
}
bool verif_ciclu_dfs(int v, int u, int capat){
//cout<<"dfs(" << v <<' '<<u<<' '<<capat<<')'<<'\n';
vector<bool>rez;
bool am_muchii_vizitate = false;
for(int i = 0; i < graf[v].size(); ++i){
int vecin = graf[v][i].nod;
if(vecin != u){
int indicele_muchiei = graf[v][i].indice;
if( muchii[indicele_muchiei].vizz == true ){
if(vecin == capat){
//cout<<"capat true"<<'\n';
return true;
}
}
}
}
for(int i = 0; i < graf[v].size(); ++i){
int vecin = graf[v][i].nod;
//cout<<"vecin: "<<vecin<<'\n';
if(vecin != u){
int indicele_muchiei = graf[v][i].indice;
//cout<<"indice: "<<indicele_muchiei<<'\n';
if( muchii[indicele_muchiei].vizz == true ){
am_muchii_vizitate = true;
//cout<< "dfs("<<vecin<<' '<<v<<' '<<capat<<')'<<'\n';
rez.push_back( verif_ciclu_dfs(vecin, v, capat) );
}
}
}
if(am_muchii_vizitate){
bool ok = false;
//cout<<"am_muchii vizitate: ";
for(int i = 0; i < rez.size(); ++i){
//cout<<rez[i]<<' ';
if(rez[i] == 1)
return true;
}
//cout<<'\n';
//cout<<ok<<'\n';
return false;
}
else { //cout<<"fals" << '\n';
return 0;
}
}
int main()
{
in>>n>>m;
for(int i = 0; i < m; ++i){
ab x; in >> x.a >> x.b >> x.c;
muchii.push_back(x);
}
sort(muchii.begin(), muchii.end(), cmp);
for(int i = 0; i < m; ++i){
gr x;
x.nod = muchii[i].b; x.indice = i;
graf[ muchii[i].a ].push_back(x);
x.nod = muchii[i].a;
graf[ muchii[i].b ].push_back(x);
}
for(int i = 0; i < m; ++i){
int cost = muchii[i].c; int u = muchii[i].a; int v = muchii[i].b;
//if(viz.size() < n){
if(verif_ciclu_dfs(v, u, u) == false){
++nr_muchii;
cost_min += cost;
viz.push_back(u);
viz.push_back(v);
muchii[i].vizz = true;
}
//}
//else break;
}
out<<cost_min<<'\n'<<nr_muchii<<'\n';
for(int i = 0; i < m; ++i){
if(muchii[i].vizz == true)
out<<muchii[i].a<<' '<<muchii[i].b<<'\n';
}
return 0;
}
/*
for(int i = 1; i <= n; ++i){
cout<<i<<'-';
for(int j = 0; j < graf[i].size(); ++j){
cout<<graf[i][j]<<' ';
}
cout<<'\n';
}
cout<<'\n';
for(int i = 0; i < m; ++i){
cout<<muchii[i].a<<' '<<muchii[i].b<<' '<<muchii[i].cost << '\n';
}
*/