顺丰笔试AC

第一题求连通团数。
const int maxn = 100005;
int n,m,k;
int a[maxn], b[maxn], vis[maxn];
vector<int> vc[maxn],vs[maxn];
set <int> an[maxn];
int ans;

void dfs(int u){
    vis[u] = 1;
    int le = vc[u].size();
    for(int i = 0;i<le;i++){
        int z = vc[u][i];
        an[ans].insert(z);
        int len = vs[z].size();
        for(int j = 0;j<len;j++){
            int v = vs[z][j];
            if(vis[v] == 0){
                dfs(v);
            }
        }
    }
}

int main()
{
    cin>>n>>m>>k;
    for(int i = 0;i<k;i++){
        int x,y;
        cin>>x>>y;
        vc[x].push_back(y);
        vs[y].push_back(x);
    }
    ans = 0;
    for(int i =1;i<=n;i++){
        if(vis[i] == 0){
            dfs(i);
            ans++;
        }
    }
    int cont = 0;
    for(int i = 0;i<ans;i++){
        if(an[i].size() == 0){
            cont++;
        }
    }
    if(cont == ans) ans++;
    cout<<ans-1<<endl;
    return 0;
}
第二题最长伪递增子序列裸题
#笔试题目##顺丰科技#
全部评论

相关推荐

1 8 评论
分享
牛客网
牛客企业服务