Pagini recente » Cod sursa (job #1454021) | Cod sursa (job #1109439) | Cod sursa (job #2400104) | Cod sursa (job #1183285) | Cod sursa (job #1894830)
#include <stdio.h>
#include <vector>
#define N 105
using namespace std;
vector<int> g[N],gt[N];
int i,j,n,k,x,ttot;
int d[N],v[N],tmax[N];
bool viz[N];
void dfs(int x)
{
int i,maxim,y;
viz[x]=true;
maxim=0;
for(i=0;i<g[x].size();i++)
{
y=g[x][i];
if(!viz[y])
dfs(y);
if(d[y]>maxim)
maxim=d[y];
}
d[x]=v[x]+maxim;
}
void dfs2(int x)
{
int i,minim,y;
viz[x]=true;
minim=ttot;
for(i=0;i<gt[x].size();i++)
{
y=gt[x][i];
if(!viz[y])
dfs2(y);
if(tmax[y]<minim)
minim=tmax[y];
}
tmax[x]=minim-v[x];
}
int main()
{
FILE *f1,*f2;
f1=fopen("pm2.in","r");
f2=fopen("pm2.out","w");
fscanf(f1,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f1,"%d",&v[i]);
for(i=1;i<=n;i++)
{
fscanf(f1,"%d",&k);
for(j=0;j<k;j++)
{
fscanf(f1,"%d",&x);
g[i].push_back(x);
gt[x].push_back(i);
}
}
for(i=1;i<=n;i++)
{
if(!viz[i])
dfs(i);
if(d[i]>ttot)
ttot=d[i];
}
for(i=1;i<=n;i++)
viz[i]=false;
for(i=1;i<=n;i++)
if(!viz[i])
dfs2(i);
fprintf(f2,"%d\n",ttot);
for(i=1;i<=n;i++)
fprintf(f2,"%d %d\n",d[i]-v[i],tmax[i]);
return 0;
}