为什么过不了第二个样例?
查看原帖
为什么过不了第二个样例?
491132
a_l_g_d楼主2021/9/10 23:37

求助神犇!

#include<bits/stdc++.h>
using namespace std;

const int maxn=1e5+10;
int n,m,ans=-1;
int val[maxn];
bool vis[maxn];

vector<int> g[maxn];

inline void dfs(int num,int sum) {
	if(num==n) {
		ans=max(ans,sum);
		return;
	} 
	dfs(num+1,sum);
	for(int i=0; i<g[num].size(); ++i) {
		if(vis[g[num][i]]==false) {
			vis[g[num][i]]=true;
			dfs(g[num][i],sum+val[g[num][i]]);
			vis[g[num][i]]=false;
		}
	}
}

inline int read() {
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}

signed main() {
	std::ios::sync_with_stdio(false);
	n=read();
	m=read();
	for(int i=1; i<=n; ++i) val[i]=read();
	while(m--) {
		int u,v;
		u=read();
		v=read();
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs(1,0);
	cout<<ans<<endl;
	return 0;
}
2021/9/10 23:37
加载中...