zoukankan      html  css  js  c++  java
  • 京东笔试

    #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;
    }
    1、逃生救援-把根节点去掉后最大连通块
    #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;
        }
    }
    dfs做法
    #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;
    }
    2、寻找子串 dp+kmp

     find做法

     

  • 相关阅读:
    河北省重大技术需求征集系统(10)
    河北省重大技术需求征集系统(9)
    大三上学期周总结
    河北省重大技术需求征集系统(8)
    《代码大全》阅读笔记(三)
    河北省重大技术需求征集系统(7)
    河北省重大技术需求征集系统(6)
    河北省重大技术需求征集系统(5)
    【自动化】Aritest+python实现客户端UI自动化
    【自动化】Monkey自动化测试实现总结
  • 原文地址:https://www.cnblogs.com/Roni-i/p/10703145.html
Copyright © 2011-2022 走看看