1、给定一个$n$个节点的无向图。找到一个长度为4的链。$5\leq n \leq 2000$
思路:枚举链的起点,暴力搜索即可。因为假设图中最长链的长度是3,那么搜索的最大复杂度是$O(n^{2})$。
#include <stdio.h> #include <string.h> #include <string> #include <iostream> #include <vector> #include <set> #include <map> #include <queue> #include <algorithm> #include <stack> #include <assert.h> using namespace std; const int N=2005; vector<int > g[N]; int h[N]; int dfs(int u,int pre,int cnt) { if(cnt==5) return 1; h[u]=1; for(int i=0;i<(int)g[u].size();++i) { int v=g[u][i]; if(v!=pre&&!h[v]&&dfs(v,u,cnt+1)) return 1; } h[u]=0; return 0; } class SmilesTheFriendshipUnicorn { public: string hasFriendshipChain(int n,vector<int> A,vector<int> B) { const int m=(int)A.size(); for(int i=0;i<m;++i) { int u=A[i]; int v=B[i]; g[u].push_back(v); g[v].push_back(u); } for(int i=0;i<n;++i) { memset(h,0,sizeof(h)); if(dfs(i,-1,1)) return "Yay!"; } return ":("; } };
时间: 2024-10-11 04:43:05