Pagini recente » Cod sursa (job #1182814) | Cod sursa (job #238784) | Cod sursa (job #2335322) | Cod sursa (job #3223813) | Cod sursa (job #951850)
Cod sursa(job #951850)
#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;
}