食物网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

posted @ 2024-02-04 11:16  G_A_TS  阅读(8)  评论(0编辑  收藏  举报