Pagini recente » Cod sursa (job #2026992) | Cod sursa (job #1520692) | Cod sursa (job #1797799) | Cod sursa (job #213569) | Cod sursa (job #1023869)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("flota.in");
ofstream fout("flota.out");
#define NMAX 50005
#define pb push_back
int t[NMAX],pas=1,q,n,m,k,pas_cost,cost[NMAX],test[100005];
struct data{
int r,c;
};
vector <data> v[NMAX];
void read();
void tipar();
void init();
void solve();
bool cmp(data a,data b)
{
return a.c>b.c;
}
int tata(int nod)
{
if(t[nod]==0)
return nod;
for(int i=0;i<v[nod].size();i++)
{
if(v[nod][i].c<q)
break;
int r=tata(t[v[nod][i].r]);
t[v[nod][i].r] = r;
return r;
}
}
int main()
{
read();
init();
for(int i=1;i<=k;i++)
fout<<test[i]<<" ";
for(int i=k;i;i--)
{
q=test[k];
solve();
for(int j=1;j<=n;j++)
fout<<t[j]<<" ";
fout<<"\n";
}
}
void solve() //q = latimea vaporuluia actual
{
for(int i=1;i<=n;i++)
{
for(int j=0;j<v[i].size();j++)
t[v[i][j].r] = tata(i);
}
}
void tipar()
{
for(int i=0;i<v[1].size();i++)
fout<<v[1][i].r<<" "<<v[1][i].c<<"\n";
}
void init()
{
for(int i=1;i<=n;i++)
{
sort(v[i].begin(),v[i].end(),cmp);
}
for(int i=1;i<=n;i++)
tata(i);
}
void read()
{
int x,y,z;
fin>>n>>m>>k;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>z;
v[x].pb(data());
v[x][v[x].size()-1].r=y;
v[x][v[x].size()-1].c=z;
v[y].pb(data());
v[y][v[y].size()-1].r=x;
v[y][v[y].size()-1].c=z;
}
for(int i=1;i<=k;i++)
fin>>test[i];
sort(test+1,test+k+1);
}