食物网Final
#include<bits/stdc++.h>
using namespace std;
int n,m,ti,lamp;
double E[21][101],N[21][101],mp[21][21],tot[21][101],tot_0[21];
int main()
{
cin>>n>>m>>ti;
for(int i=1;i<=m;i++)
{
int start,end;
cin>>start>>end;
mp[start][end]=1;
}
for(int i=1;i<=n;i++)
{
cin>>N[i][0];
N[i][1]=N[i][0];
N[i][2]=N[i][0];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j])
{
tot_0[i]+=N[j][0];
}
}
if(!tot_0[i])
{
for(int k=0;k<=ti;k++)
tot[i][k]=1;
tot_0[i]=1;
}
}
E[1][0]=N[1][0];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j])
{
tot[i][0]+=N[j][0];
}
}
for(int j=1;j<=n;j++)
{
if(mp[i][j])
{
E[j][0]+=E[i][0]*N[j][0]/tot[i][0];
}
}
}
cin>>lamp;
cin>>N[lamp][0];
E[1][1]=N[1][0];
N[lamp][1]=N[lamp][0];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j])
{
tot[i][0]+=N[j][0];
}
}
for(int j=1;j<=n;j++)
{
if(mp[i][j])
{
E[j][1]+=E[i][1]*N[j][0]/tot[i][0];
}
}
}
for(int i=1;i<=n;i++)
tot[i][0]=tot_0[i];
for(int k=1;k<=ti;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j])
{
tot[i][k]+=N[j][k-1];
}
}
if(i==1)
E[i][k]=E[i][k-1]*(tot[i][k-1]+10)/(10+tot[i][k]);
for(int j=1;j<=n;j++)
{
if(mp[i][j])
{
E[j][k]+=E[i][k]*N[j][k-1]/tot[i][k];
}
}
}
N[1][k]=E[1][k];
E[1][k]*=1.2;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j])
{
E[i][k]-=0.2*(E[j][k]);
}
}
}
for(int i=2;i<=n;i++)
{
if(i!=lamp)
N[i][k+1]=(N[i][0]*(E[i][k]+30)/(E[i][0]+30)+N[i][k+1])/2;
else
{
N[i][k+1]=(N[i][0]*(E[i][k])/(E[i][0])+N[i][k+1])/2;
}
}
}
for(int i=1;i<=n;i++)
{
printf("[%.2lf",N[i][0]);
for(int k=2;k<=ti;k++)
{
printf(", %.2lf",N[i][k]);
}
cout<<"]"<<endl;
}
return 0;
}
9 9 12
1 2
1 3
1 4
3 5
3 6
4 7
5 8
6 9
7 8
100 20 30 40 40 15 40 10 40
2
80