zoukankan      html  css  js  c++  java
  • 2019ICPC上海站

    https://ac.nowcoder.com/acm/contest/4370

    B题

    判断是不是前缀编码T组样例,N个字符串,判断有没有一个是另一个的前缀

    Trie

    标记这个节点的编号是否出现过两次

    注意,一定要有ed,比如说第二组测试样例,如果没有ed,5,59此时5已经走过了

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 10005 * 10;
    string str;
    int t,n;
    int flag;
    int trie[maxn][26],id = 1,vis[maxn],ed[maxn];
    void insert(string s) {
        int p = 1;
        for(int i = 0; i < s.size(); i++) {
            int ch = s[i] - '0';
            if (trie[p][ch]== -1)
                trie[p][ch] = ++id;
            p = trie[p][ch];
            if(ed[p])
                flag = 0;
            vis[p]++;
        }
        if(vis[p] > 1)
            flag = 0;
        ed[p]++;
    
    }
    int main(){
        //freopen("in","r",stdin);
        ios::sync_with_stdio(0);
        cin >> t;
        for(int i = 1; i <= t;i++){
            cout << "Case #" << i << ": ";
            cin >> n;
            flag = 1;
            memset(vis,0, sizeof(vis));
            memset(ed,0, sizeof(ed));
            memset(trie,-1, sizeof(trie));
            id = 1;
            for(int j = 1; j <= n; j++) {
                cin >> str;
                insert(str);
            }
            if(flag)
                cout << "Yes" << endl;
            else cout << "No" << endl;
        }
        return 0;
    }
    View Code

    K Color Graph

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 int t, n, m;
     5 int u[205], v[205];
     6 int vis[20];
     7 int ans;
     8 
     9 void dfs(int x) {
    10     if (x == n) {
    11         int cnt = 0;
    12         for (int i = 1; i <= m; i++)
    13             cnt += (vis[u[i]] ^ vis[v[i]]);
    14         ans = max(ans, cnt);
    15         return;
    16     }
    17 
    18     vis[x] = 1;
    19     dfs(x + 1);
    20     vis[x] = 0;
    21 
    22     dfs(x + 1);
    23 }
    24 
    25 int main() {
    26     //freopen("in", "r", stdin);
    27     ios::sync_with_stdio(0);
    28     cin >> t;
    29     for (int j = 1; j <= t; j++) {
    30         cin >> n >> m;
    31         ans = 0;
    32         for (int i = 1; i <= m; i++)
    33             cin >> u[i] >> v[i];
    34         dfs(1);
    35         cout << "Case #" << j << ": " << ans << endl;
    36     }
    37     return 0;
    38 }
    View Code
  • 相关阅读:
    召开演示会议和总结会议
    召开每天的站立会议
    禅道管理中的项目管理--组织进行任务分解
    linux sort,uniq,cut,wc命令详解
    json2.js的用途(拯救IE)
    memcache的内存回收机制
    memcache内存分配机制
    Linux之Sed命令详解(总结一些实用例子)
    CentOS 设置网络(修改IP&修改网关&修改DNS)--update.14.08.15
    php中文字符串翻转
  • 原文地址:https://www.cnblogs.com/xcfxcf/p/12486196.html
Copyright © 2011-2022 走看看