Cod sursa(job #1023869)

Utilizator ard_procesoareLupicu ard_procesoare Data 7 noiembrie 2013 20:23:50
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.69 kb
#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);
}