站外题目求助
查看原帖
站外题目求助
766781
genshin202729852楼主2024/7/18 16:38

参观路线(tour) 【题目描述】 今天比赛的地点是 XX 中学。学校有许多景点,景点间有路相连,构成了一 幅无向连通偶度图。现在,我们要求一条参观路线,当然得能够回到起点,使得 每条路和每个景点都至少被访问 1 次。每到一个曾经还没有到过的景点,同学们 就能够得到相应的愉悦值,不过愉悦值是会发生变化的,如果一个景点它是第 k 个新到达的,那么这个景点能给同学们的愉悦值就会减少 k,下次再到这个景点 时不得到任何愉悦值。当然同学们不愿意多走路,所以每走一条路(重复走的也 算),同学们就会得到一个-1 的愉悦值。我们希望通过参观能使同学们尽量高兴, 即得到的总愉悦值最大。 不过还要特别说明的是:n 个景点被编号为 1 至 n;参观路线起点是 1 号景 点;可能有某条路它两头连接着同一个景点,两个景点间也可能有多条路相连。 【输入文件】tour.in 第一行两个数字 n 和 m,表示景点数和道路的数目。 接着 n 行,每行一个数字,表示每个景点初始能够给同学们的愉悦值 wi。 接着 m 行,每行两个数字,描述一条路连接的两个景点的编号。 【输出文件】tour.out 第一行一个数字 ans,表示最大的总愉悦值。 第二行一个数字 k,表示你找到的路径的长度。 接下来 k+1 个数字,描述你的路径,方案可能很多,输出任意一个。 【样例输入】 6 7 1 7 4 10 20 5 2 4 1 5 2 1 4 5 3 6 1 6 1 3 July 【样例输出】 19 7 1 5 4 2 1 6 3 1 【数据范围】 无向连通偶度图,即图是连通的,边是无向的,所有点的度都是偶数。 1 至 n 号景点,同学们分别得到 0、3、-2、7、18 和 0 的愉悦值;每条路又 得到-1 的愉悦值,一共走了 7 条路。故总的愉悦值是 19。 【数据范围】 对于至少 40%的数据,1<=n<=40,1<=m<=150; 对于至少 60%的数据,1<=n<=100,1<=m<=400; 对于 100%的数据,1<=n<=200,1<=m<=800,1<=wi<=1000。

望大佬帮忙改代码

#include<iostream>
using namespace std;
int s1[801][801];
int cnt,a,num,n,m,k,lz[801],z[1101],zz[1101],lj[500001],flag[1010][810];
bool vis[801];
void dfs(int jd,int step)
{
	if(step==m)
	{
		
		for(int i=1;i<=m;i++)
		{
			cout<<lj[i]<<" ";
		}
		cout<<"1";
		exit(0);
		return ;
	}
	for(int j=1;j<=n;j++)
	{
		if(s1[jd][j]>=1)
		{
			flag[jd][j]=1;
			s1[jd][j]--;
			s1[j][jd]--;
			dfs(j,step++);
			step--;
			flag[jd][j]=0;
			s1[jd][j]++;
			s1[j][jd]++;
		}
	}
	
	
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>lz[i];
		cnt+=lz[i];
		cnt-=i;
	}
	for(int i=1;i<=m;i++)
	{
		cin>>z[i]>>zz[i];
		s1[z[i]][zz[i]]+=1;
		s1[zz[i]][z[i]]+=1;
	}
	cnt-=m;
	cout<<cnt<<endl<<m<<endl;
	dfs(1,0);
	return 0;
}
/*
6 7
1
7
4
10
20
5
2 4
1 5
2 1
4 5
3 6
1 6
1 3
*/
2024/7/18 16:38
加载中...