Cod sursa(job #951850)

Utilizator misinoonisim necula misino Data 21 mai 2013 21:07:06
Problema Mesaj4 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include<fstream>
#include<vector>
#include<cstring>
#include<cstdio>
#define D 3000000
using namespace std;
FILE *f,*g;
int i,m,n,x,y,op,maxi,nr,c,cc,ccc,poz,fr[50100],pr[50200],ul[50100],cul[50100];
bool viz[50100];
vector<int>l[50100];
char buf[D];
inline unsigned int ianr()
{
    unsigned int nr=0;
    while(buf[poz]<'0'||buf[poz]>'9')
    if(++poz>=D)
    fread(buf,D,1,f),poz=0;
    while('0'<=buf[poz]&&buf[poz]<='9')
    {
        nr=nr*10+buf[poz]-'0';
        if(++poz>=D)
        fread(buf,D,1,f),poz=0;
    }
    return nr;
}
inline void dfs(int x)
{
    pr[x]=++nr;
    viz[x]=1;
    for(vector<int>::iterator it=l[x].begin();it!=l[x].end();++it)
    if(!viz[*it])
    dfs(*it);
    ul[x]=nr;
}
int main()
{
    f=fopen("color4.in","r");
    g=fopen("color4.out","w");
    poz=D+1;
    n=ianr();
    m=ianr();
    c=ianr();
    for(i=1;i<n;++i)
    {
        x=ianr();
        y=ianr();
        l[x].push_back(y);
        l[y].push_back(x);
    }
    dfs(1);
    for(i=1;i<=nr;++i)
    cul[i]=1;
    for(;m;--m)
    {
        op=ianr();
        if(op==0)
        {
            x=ianr();
            cc=ianr();
            for(i=pr[x];i<=ul[x];++i)
            cul[i]=cc;
        }
        else
        {
            x=ianr();
            for(i=0;i<=c;++i)
            fr[i]=0;
            for(i=pr[x];i<=ul[x];++i)
            ++fr[cul[i]];
            maxi=0;
            for(i=0;i<=c;++i)
            if(fr[i]>maxi)
            {
                ccc=i;
                maxi=fr[i];
            }
            fprintf(g,"%d %d\n",ccc,maxi);
//            g<<ccc<<' '<<maxi<<'\n';
        }
    }
    return 0;
}