首页 > 代码库 > topcoder srm 682 div1 -3

topcoder srm 682 div1 -3

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 ":(";	}};

  

topcoder srm 682 div1 -3