Pagini recente » Cod sursa (job #192083) | Cod sursa (job #2251540) | Cod sursa (job #1615751) | Cod sursa (job #1381470) | Cod sursa (job #2451325)
#include<bits/stdc++.h>
#define fi first
#define sc second
using namespace std;
ifstream f("ninjago.in");
ofstream g("ninjago.out");
vector<pair<int, pair<int, int>>>v[31201];
int ans1, ans2, ans22, ans3;
int tip, n, m, E, x, y, cst, z;
char c[11];
bool viz[31201];
void Dijkstra()
{
set<pair<int, pair<int, int>>>S;
S.insert(make_pair(0, make_pair(0, 1)));
while(!S.empty())
{
int nr=(*S.begin()).fi;
int cost=(*S.begin()).sc.fi;
int nod=(*S.begin()).sc.sc;
S.erase(S.begin());
if(!viz[nod])
{
viz[nod]=1;
ans1++;
if(nr)
{
ans2++;
ans22+=nr;
}
ans3+=cost;
for(int i=0; i<v[nod].size(); i++)
{
int vecin=v[nod][i].fi;
int ct=v[nod][i].sc.fi;
int nrE=v[nod][i].sc.sc;
if(!viz[vecin])
{
if(tip==2 || tip==3 || !nrE)
S.insert(make_pair(nrE, make_pair(ct, vecin)));
}
}
}
}
}
int main()
{
f>>tip;
f>>n>>m;
for(int i=1; i<=m; i++)
{
f>>x>>y>>c;
cst=0;
E=0;
for(int i=0; i<4; i++)
{
if(c[i]!='E')
cst+=(c[i]-'A'+1)*pow(5, i);
if(c[i]=='E')
E++;
}
v[x].push_back(make_pair(y, make_pair(cst, E)));
v[y].push_back(make_pair(x, make_pair(cst, E)));
}
Dijkstra();
if(tip==1)
g<<ans1;
else if(tip==2)
g<<ans2<<'\n'<<ans22;
else
g<<ans3;
return 0;
}