本题是深度优先搜索,咱开数组被D掉了,还是乖乖用struct乱搞。
之前的数组就是暴力,对了一半,但在一个地方wa了。
看了好久,代码变成一坨,就像这样:
1 for(int i=1;i<=n;i++){ 2 int hh=1,hhh=1;int last=0; 3 memset(c,0,sizeof(c)); 4 for(int k=1;k<=n;k++){int max=0; 5 for(int j=1;j<=n;j++){ 6 if(b[i][j]==1 && max<a[i][j] && c[j]==0){ 7 hh=i;hhh=j;max=a[i][j];c[i]=1;c[j]=1; 8 } 9 } 10 if(last!=max){ans[i]+=max;last=max;} 11 } 12 }
然后我就果断的放弃。
新的是这样:
#include <iostream> #include <cstring> using namespace std; struct edge { int v,w,next; }a[101]; int link[21],n,m; bool v[21]; void add(int x,int y,int w) { static int p=0; p++; a[p].v=y; a[p].w=w; a[p].next=link[x]; link[x]=p; } int dfs(int x) { if(v[x])return 0; int ans=0; v[x]=true; for(int i=link[x];i!=0;i=a[i].next) if(v[a[i].v]==0) ans=max(ans,dfs(a[i].v)+a[i].w); v[x]=false; return ans; } int main() { int x,y,w,ans=0; cin >> n >> m; for(int i=1;i<=m;i++) { cin >> x >> y >> w; add(x,y,w); add(y,x,w); } for(int i=1;i<=n;i++) { memset(v,0,sizeof(v)); ans=max(ans,dfs(i)); } cout << ans << endl; return 0; }
个人感觉,暴力还是挺不错的,可以用来刷水题
时间: 2024-10-05 09:20:24