1 条题解

  • 0
    @ 2022-11-1 20:31:57

    暴力分

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,k;//点数、边数、转车次数
    long long score[2505];
    int x[10005],y[10005];
    bool f(int a,int b){
    	for(int i=1;i<=m;i++)
    		if(x[i]==a&&y[i]==b||
    		   x[i]==b&&y[i]==a)
    			return true;
    	return false;
    } 
    int main()
    {
    	//输入 
    	cin>>n>>m>>k;
    	for(int i=2;i<=n;i++)
    		cin>>score[i];
    	for(int i=1;i<=m;i++)
    		cin>>x[i]>>y[i];
    	//计算最佳得分
    	long long ans = 0;
    	for(int a=2;a<=n;a++)
    	for(int b=2;b<=n;b++)
    	for(int c=2;c<=n;c++)
    	for(int d=2;d<=n;d++){
    		if(a==b||a==c||a==d||b==c||b==d||c==d)
    			continue;
    		if(f(1,a)&&f(a,b)&&f(b,c)&&f(c,d)&&f(d,1))
    			ans = max(ans,score[a]+score[b]+score[c]+score[d]);
    	}	 
    	//输出
    	cout<<ans<<"\n"; 
    	return 0;
    }
    
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,k;//点数、边数、转车次数
    long long score[2505];
    bool f[2505][2505];//f[i][j] i与j是否能互相到达 
    int main()
    {
    	//freopen("holiday.in","r",stdin);
    	//freopen("holiday.out","w",stdout);
    	//输入 
    	cin>>n>>m>>k;
    	for(int i=2;i<=n;i++)
    		cin>>score[i];
    	for(int i=1;i<=m;i++){ 
    		int x,y;
    		cin>>x>>y;
    		f[x][y] = true;
    		f[y][x] = true;
    	} 
    	//计算最佳得分
    	long long ans = 0;
    	for(int a=2;a<=n;a++)
    	for(int b=2;b<=n;b++)
    	for(int c=2;c<=n;c++)
    	for(int d=2;d<=n;d++){
    		if(a==b||a==c||a==d||b==c||b==d||c==d)
    			continue;
    		if(f[1][a]&&f[a][b]&&f[b][c]&&f[c][d]&&f[d][1])
    			ans = max(ans,score[a]+score[b]+score[c]+score[d]);
    	}	 
    	//输出
    	cout<<ans<<"\n"; 
    	return 0;
    }
    
    
    
    • 1

    信息

    ID
    1146
    时间
    2000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    35
    已通过
    6
    上传者