1 条题解

  • 0
    @ 2024-12-24 10:06:05

    C++ :

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<iomanip>
    #define MAX 1000000
    using namespace std;
    
    int n,x,y,tot=0,ans=0x7fffffff;
    int p[101];
    int g[101][101]={0};
    
    void in();
    void out();
    void flod();
    void find();
    
    int main()
    {
    	//freopen("3.in","r",stdin);
    	in();
    	flod();
    	find();
    	out();
    	return 0;
    }
    //
    void in()
    {
    	cin>>n;
    	n++;
    	for (int i=1;i<n;i++)
    	{
    		g[i][i]=0;
    		for (int j=1;j<n;j++)
    		{
    			if (i==j)
    			{
    				continue;
    			}
    			if (g[i][j])
    			{
    				continue;
    			}
    			g[i][j]=MAX;
    		}
    		cin>>p[i]>>x>>y;
    		if (x>0)
    		{
    			g[i][x]=g[x][i]=1;
    		}
    		if (y>0)
    		{
    			g[i][y]=g[y][i]=1;
    		}
    	}
    }
    //
    void flod()
    {
    	for (int i=1;i<n;i++)
    	{
    		for (int j=1;j<n;j++)
    		{
    			if (j==i)// || g[i][j]==MAX
    			{
    				continue;
    			}
    			for (int k=1;k<n;k++)
    			{
    				/*if (g[k][j]==MAX)
    				{
    					continue;
    				}*/
    				if ((k!=j) && (k!=i) && (g[i][j]+g[j][k]<g[i][k]))
    				{
    					g[i][k]=g[i][j]+g[j][k];
    				}
    			}
    		}
    	}
    }
    //
    void find()
    {
    	for (int i=1;i<n;i++)
    	{
    		tot=0;
    		for (int j=1;j<n;j++)
    		{
    			if (g[i][j]==MAX)
    			{
    				continue;
    			}
    			tot+=g[i][j]*p[j];
    		}
    		if (tot<ans)
    		{
    			ans=tot;
    		}
    	}
    }
    //
    void out()
    {
    	cout<<ans<<endl;
    }
    
    • 1

    信息

    ID
    1888
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者