【专题复习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;
}

posted @ 2022-02-27 16:57  勇往直前的力量  阅读(235)  评论(0编辑  收藏  举报