Pagini recente » Cod sursa (job #1266568) | Rating cont nou (nick.co) | Cod sursa (job #2095341) | Cod sursa (job #2359086) | Cod sursa (job #2710244)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream in("ninjago.in");
ofstream out("ninjago.out");
struct ind
{
int a, b, mm, e;
} v[32000] = {0};
bool comp(ind & x, ind & y)
{
if(x.mm != y.mm)
return x.mm < y.mm;
if(x.a != y.a)
return x.a < y.a;
if(x.b != y.b)
return x.b < y.b;
}
int q[32000] = {0};
void kruskal1(ind v[], int m, int n, int t, int q[])
{
int c = 1, orr = 0, s = 0;
int o = 0, k = 0;
for(int i = 1; i <= m ; i ++)
{
if(q[v[i].a] != q[v[i].b])
{
s = s + v[i].mm;
orr = 0;
if(v[i].e != 0)
{
o ++;
k = k + v[i].e;
orr = 1;
s = s - v[i].e * 1000;
}
int left = q[v[i].a];
int right = q[v[i].b];
if(right == 1)
{
int h = left;
left = 1;
right = h;
}
for(int j = 1; j <= n; j ++)
{
if(q[j] == right)
{
if(left == 1 && orr != 1)
{
c ++;
}
q[j] = left;
}
}
}
}
if(t == 1)
{
out << c;
}
else if( t == 2 )
{
out << o << '\n' << k;
}
else if(t == 3)
{
out << s;
}
}
int main()
{
int t, n, m, p;
char ob[5];
in >> t >> n >> m;
for(int i = 1; i <= m; i ++)
{
in >> v[i].a >> v[i].b;
q[v[i].a] = v[i].a;
q[v[i].b] = v[i].b;
in.get();
in.get(ob, 5);
for(int j = 0; j < strlen(ob); j ++ )
{
if(j == 0)
p = 1;
if(j == 1)
p = 5;
if(j == 2)
p = 25;
if(j == 3)
p = 125;
if(ob[j] == 'A')
v[i].mm = v[i].mm + p * 1;
if(ob[j] == 'B')
v[i].mm = v[i].mm + p * 2;
if(ob[j] == 'C')
v[i].mm = v[i].mm + p * 3;
if(ob[j] == 'D')
v[i].mm = v[i].mm + p * 4;
if(ob[j] == 'E')
{
v[i].mm = v[i].mm + 1000;
v[i].e ++;
}
}
}
sort(v+1, v+1+m, comp);
kruskal1(v, m, n, t, q);
in.close();
out.close();
return 0;
}