#include <bits/stdc++.h> using namespace std; #define maxn 100005 int d[maxn]; int n; int fa[maxn]; void init(int x) { for(int i=1; i<=x; i++) fa[i]=i,d[i]=1; } int find_fa(int x) { return fa[x] == x ? x : fa[x] = find_fa(fa[x]); } void join(int x,int y) { int fx=find_fa(x); int fy=find_fa(y); if(fx!=fy) { fa[fx]=fy; d[fy] += d[fx]; } } int main() { int x,y,mx=0; cin>>n; init(n); for(int i=1;i<n;i++) { cin>>x>>y; if(x!=1&&y!=1) { join(x,y); } } for(int i=1;i<=n;i++) if(mx<d[i]) mx=d[i]; cout<<mx<<endl; }
#include<iostream> #include<vector> #include<cstring> #include<algorithm> using namespace std; const int MAXN=100005; int vis[MAXN],n; vector<int> vec[MAXN]; int DFS(int root) { vis[root]=1; int sum=1; for(int i=0;i<vec[root].size();i++) { if(!vis[vec[root][i]]) sum+=DFS(vec[root][i]); } return sum; } int main() { while(cin>>n) { for(int i=1;i<n;i++) { int x,y; cin>>x>>y; vec[x].push_back(y); vec[y].push_back(x); } int sum=0; memset(vis,0,sizeof(vis)); vis[1]=1; for(int i=0;i<vec[1].size();i++) { sum=max(sum,DFS(vec[1][i])); } cout<<sum<<endl; } }
#include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long long ll; const int N=100005; int nxt[N]; vector<int>e[N]; void get_nxt(string &t) { int i=0,j=-1,len=t.size(); nxt[0]=-1; while(i<len) { if(j==-1||t[i]==t[j]) { nxt[++i]=++j; } else j=nxt[j]; } } void kmp(string &s,string &t) { get_nxt(t); int ans=0,i=0,j=0,la=s.size(),lb=t.size(); while(i<la) { if(j==-1||s[i]==t[j]) { ++i,++j; } else j=nxt[j]; if(j==lb) { e[i-1].push_back(i-lb-1); j=nxt[j]; } } } string t[15]; int dp[100005]; int main() { ios::sync_with_stdio(false); int n; cin>>n; string s; for(int i=0;i<n;++i) cin>>t[i]; cin>>s; for(int i=0;i<n;++i) kmp(s,t[i]); int len=s.size(); for(int i=0;i<len;++i) { dp[i+1]=dp[i]; for(auto &j:e[i]) dp[i+1]=max(dp[i+1],dp[j+1]+1); } cout<<dp[len]<<endl; return 0; }
find做法