Pagini recente » Cod sursa (job #979285) | Cod sursa (job #1337363) | Cod sursa (job #2441215) | Cod sursa (job #3156440) | Cod sursa (job #2948359)
#include <fstream>
#include <vector>
#define MAXN 31200
using namespace std;
ifstream fin( "ninjago.in" );
ofstream fout( "ninjago.out" );
struct Node{
int vecin, cost, e;
};
struct Muchie{
int x, y, cost, e;
}muchii[MAXN];
bool cmp( Muchie a, Muchie b ){
if( a.e == b.e )
return a.cost < b.cost;
return a.e < b.cost;
}
vector <Node> graph[MAXN];
int marked[MAXN];
void dfs( int node, int comp ){
int vecin, i;
marked[node] = comp;
for( i = 0; i < graph[node].size(); i++ ){
vecin = graph[node][i].vecin;
if( graph[node][i].e == 0 && marked[vecin] == 0 )
dfs( vecin, comp );
}
}
int main(){
int T, n, m, i, j, cost, x, y, pow, e, sol, comp, alese, sumcost, sumE;
char ch;
fin >> T >> n >> m;
for( i = 0; i < m; i++ ){
fin >> x >> y;
cost = 0;
e = 0;
pow = 1;
for( j = 0; j < 4; j++ ){
fin >> ch;
if( ch == 'E' )
e++;
else
cost += (ch - 'A' + 1) * pow;
pow *= 5;
}
graph[x - 1].push_back( {y - 1, cost, e} );
graph[y - 1].push_back( {x - 1, cost, e} );
muchii[i].x = x;
muchii[i].y = y;
muchii[i].cost = cost;
muchii[i].e = e;
}
if( T == 1 ){
dfs( 0, 1 );
sol = 0;
for( i = 0; i < n; i++ )
if( marked[i] == 1 )
sol++;
fout << sol;
}
else{
//componente conexe
comp = 0;
for( i = 0; i < n; i++ ){
if( marked[i] == 0 ){
comp++;
dfs( i, comp );
}
}
sort( muchii, muchii + m, cmp );
alese = 0;
sumcost = 0;
sumE = 0;
i = 0;
while( alese < n - 1 ){
if( marked[muchii[i].x] != marked[muchii[i].y] ){ //unim cele doua comp conexe
}
}
}
return 0;
}