• 【专题复习3:图论】1122、1126、1142、1150


    1122

    1122

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    int n,m;
    int G[210][210];
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int a,b;
        cin>>n>>m;
        for(int i=0;i<m;i++){
            cin>>a>>b;
            G[a][b]=1;
            G[b][a]=1;
        }
        int k,num;
        cin>>k;
        while(k--){
            bool flag1=true,flag2=true;
            cin>>num;
            vector<int> v(num);
            set<int> s;
            for(int i=0;i<num;i++){
                cin>>v[i];
                s.insert(v[i]);
            }
            if(s.size()!=n||n!=num-1||v[0]!=v[num-1]) flag1=false;
            for(int i=0;i<num-1;i++)
                if(G[v[i]][v[i+1]]==0) flag2=false;
            printf("%s",flag1 && flag2 ? "YES\n" : "NO\n");
        }
        return 0;
    }
    
    

    1126

    1126

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    int n,m,cnt;
    vector<int> v[510];
    bool vis[510];
    void dfs(int id)
    {
        vis[id]=true;
        cnt++;
        for(int i=0;i<v[id].size();i++)
            if(vis[v[id][i]]==false)
                dfs(v[id][i]);
    }
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int a,b,even=0;
        cin>>n>>m;
        for(int i=0;i<m;i++){
            cin>>a>>b;
            v[a].push_back(b);
            v[b].push_back(a);
        }
        dfs(1);
        for(int i=1;i<=n;i++){
            if(i!=1) cout<<" ";
            cout<<v[i].size();
            if(v[i].size()%2==0) even++;
        }
        cout<<endl;
        if(cnt==n&&even==n) cout<<"Eulerian";
        else if(cnt==n&&even==n-2) cout<<"Semi-Eulerian";
        else cout<<"Non-Eulerian";
        return 0;
    }
    
    

    1142

    1142

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    int nv,ne;
    int e[210][210];
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int a,b;
        cin>>nv>>ne;
        for(int i=0;i<ne;i++){
            cin>>a>>b;
            e[a][b]=e[b][a]=1;
        }
        int m,k;
        cin>>m;
        while(m--){
            cin>>k;
            vector<int> v(k);
            int hash[210]={0};
            int isclique=1,ismaximal=1;
            for(int i=0;i<k;i++){
                cin>>v[i];
                hash[v[i]]=1;
            }
            for(int i=0;i<k-1;i++){
                if(isclique==0) break;
                for(int j=i+1;j<k;j++){
                    if(e[v[i]][v[j]]==0){
                        isclique=0;
                        cout<<"Not a Clique"<<endl;
                        break;
                    }
                }
            }
            if(isclique==0) continue;
            for(int i=1;i<=nv;i++){
                if(hash[i]==0){
                    for(int j=0;j<k;j++){
                        if(e[i][v[j]]==0) break;
                        if(j==k-1) ismaximal=0;
                    }
                }
                if(ismaximal==0){
                    cout<<"Not Maximal"<<endl;
                    break;
                }
            }
            if(ismaximal==1) cout<<"Yes"<<endl;
        }
        return 0;
    }
    
    

    1150

    1150

    点击查看代码
    #include <iostream>
    #include <vector>
    #include <set>
    using namespace std;
    int e[300][300], n, m, k, ans = 99999999, ansid;
    vector<int> v;
    void check(int index) {
        int sum = 0, cnt, flag = 1;
        scanf("%d", &cnt);
        set<int> s;
        vector<int> v(cnt);
        for (int i = 0; i < cnt; i++) {
            scanf("%d", &v[i]);
            s.insert(v[i]);
        }
        for (int i = 0; i < cnt - 1; i++) {
            if(e[v[i]][v[i+1]] == 0) flag = 0;
            sum += e[v[i]][v[i+1]];
        }
        if (flag == 0) {
            printf("Path %d: NA (Not a TS cycle)\n", index);
        } else if(v[0] != v[cnt-1] || s.size() != n) {
            printf("Path %d: %d (Not a TS cycle)\n", index, sum);
        } else if(cnt != n + 1) {
            printf("Path %d: %d (TS cycle)\n", index, sum);
            if (sum < ans) {
                ans = sum;
                ansid = index;
            }
        } else {
            printf("Path %d: %d (TS simple cycle)\n", index, sum);
            if (sum < ans) {
                ans = sum;
                ansid = index;
            }
        }
    }
    int main() {
        scanf("%d%d", &n, &m);
        for (int i = 0; i < m; i++) {
            int t1, t2, t;
            scanf("%d%d%d", &t1, &t2, &t);
            e[t1][t2] = e[t2][t1] = t;
        }
        scanf("%d", &k);
        for (int i = 1; i <= k; i++) check(i);
        printf("Shortest Dist(%d) = %d\n", ansid, ans);
        return 0;
    }
    
    
  • 相关阅读:
    PHP之目录遍历
    PHP之验证码
    PHP之验证码
    PHP之异常处理模式
    PHP之pdo的预处理模式
    PHP之PDO
    PHP之cookie和session
    PHP之MVC
    单例模式
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/moonlight1999/p/15942753.html
Copyright © 2020-2023  润新知