首页 > 其他分享 >C - Friend-Graph HDU - 6152 三元环 & 拉姆齐定理

C - Friend-Graph HDU - 6152 三元环 & 拉姆齐定理

时间:2022-09-07 17:12:38浏览次数:116  
标签:HDU return int Graph init vis 6152 && size

原题链接
题意:判断图和补图 是否含有三元环

拉姆齐定理

拉姆齐定理:

在>=6个点的完全图中,用红蓝两色染色,一定存在一个红色或者蓝色的三角形。

所有n>=6的话直接输出bad team,否则进行暴力即可。

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 20;
int n, m;
vector<int> g[N];
int vis[N];
int get_sum()
{
    for (int i = 1; i <= n; i++)
    {
        for (int j : g[i])
            if (g[i].size() > g[j].size() || (g[i].size() == g[j].size() && i > j))
                vis[j] = 1;
        for (int j : g[i])
            if (g[i].size() > g[j].size() || (g[i].size() == g[j].size() && i > j))
                for (int k : g[j])
                    if (g[j].size() > g[k].size() || (g[j].size() == g[k].size() && j > k))
                        if (vis[k])
                            return 1;
        for (int j : g[i])
            if (g[i].size() > g[j].size() || (g[i].size() == g[j].size() && i > j))
                vis[j] = 0;
    }
    return 0;
}
void init()
{
    m = 0;
    for (int i = 1; i <= min(10, n); ++i)
        g[i].clear();
}
void solve()
{
    cin >> n;
    init();
    for (int i = 1; i <= n - 1; i++)
    {
        for (int j = i + 1; j <= n; j++)
        {
            int t;
            cin >> t;
            if (t && i < 10 && j < 10)
            {
                m++;
                g[i].push_back(j);
                g[j].push_back(i);
            }
        }
    }
    if (n > 6)
        printf("Bad Team!\n");
    else if (get_sum())
        printf("Bad Team!\n");
    else
        printf("Great Team!\n");
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    cin >> t;

    while (t--)
        solve();
    return 0;
}

暴力题解

注意及时剪枝结束,不然会超时。
代码

#include <bits/stdc++.h>
using namespace std;
// #define int long long
// #define pii pair<int, int>
//***********************必不可少,不然内存超限
#define int short int 
const int N = 3010;
const int mod = 1e9 + 7;
int n, m;
vector<int> g[N];
int vis[N];
int get_sum()
{
    for (int i = 1; i <= n; i++)
    {
        for (int j : g[i])
            if(g[i].size()>g[j].size() || (g[i].size()==g[j].size() && i>j))
                vis[j] = 1;
        for (int j : g[i])
            if(g[i].size()>g[j].size() || (g[i].size()==g[j].size() && i>j))
                for (int k : g[j])
                    if(g[j].size()>g[k].size() || (g[j].size()==g[k].size() && j>k))
                        if (vis[k])
                           return 1;
        for (int j : g[i])
            if(g[i].size()>g[j].size() || (g[i].size()==g[j].size() && i>j))
                vis[j] = 0;
    }
    return 0;
}
void init()
{
    m = 0;
    for (int i = 1; i <= n; ++i)
        g[i].clear();
}
void solve()
{
    cin >> n;
    init();
    for (int i = 1; i <= n - 1; i++){
        for (int j = i + 1; j <= n; j++){
            int t;cin >> t;
            if (t){
                m++;
                g[i].push_back(j);
                g[j].push_back(i);
            }
        }
    }
    int ans1 = 0, ans2 = 0;
    ans1 = get_sum();
    m = n * (n - 1) / 2 - m;
    //反向建边
    for (int i = 1; i <= n; ++i)
    {
        memset(vis, 0, sizeof vis);
        for (int j : g[i])
        {
            vis[j] = 1;
        }
        g[i].clear();
        for (int j = 1; j <= n; j++)
        {
            if (vis[j] == 0)
                g[i].push_back(j);
        }
    }
    ans2 = get_sum();
    if (ans1 == 0 && ans2 == 0)
        cout << "Great Team!" << endl;
    else
        cout << "Bad Team!" << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    cin >> t;

    while (t--)
        solve();
    return 0;
}

标签:HDU,return,int,Graph,init,vis,6152,&&,size
From: https://www.cnblogs.com/kingwz/p/16666511.html

相关文章

  • A Secret HDU - 6153 扩展KMP || KMP
    题目链接:https://vjudge.net/problem/HDU-6153题意求一个串T的所有后缀在串S中出现的次数,最后再求和。扩展KMP解法可以利用拓展KMP求出S的每一个后缀和T的最长公共前......
  • ubuntu20.04无法正确识别Intel Corporation UHD Graphics 630集成显卡的问题
    我的电脑硬件配置:CPU:Intel®Core™[email protected]×12显卡:MesaIntel®UHDGraphics630(CFLGT2)最开始我安装的是ubuntu22.04,显卡的识别没问题,双......
  • HDU5593 ZYB's Tree
    求\(n\)个点的树上对于每个点距离小于\(k\)的点的数量(边权均为\(1\))。\(n\leq5\times10^5,k\leq10\)。设\(f[u][i]\)表示距离\(u\)点\(i\)距离以内并且......
  • 2022 HDU多校10
    WinnerPrediction(网络流)Problem\(n\)个人进行比赛,赢最多的人获胜,保证一定可以分出胜负,现在已知\(m_1\)场对决结果,还有\(m_2\)场对决结果未知,但知道比赛的两个人是谁,问......
  • 2022 HDU多校9
    ArithmeticSubsequence(二进制、思维、分治)Problem给定一个长度为\(n\)的序列,问是否可以对它重新排序使得重排后的序列中不存在等差子序列Solve如果一个数出现了\(3......
  • 2022 HDU多校8
    Theramore(思维)Problem给定一个01串,可以进行无限次操作,每次操作可以把一个长度为奇数的区间翻转,问可以得到的字典序最小的01串是多少Solvehit1:反转后奇数位置还是在......
  • Fluid Simulation for Computer Graphics - 第一章(The Equations of Fluids)学习
      从我们呼吸的空气到覆盖地球三分之二的海洋,流体在我们的身边随处可见,是我们所知道的一些最美丽和最令人印象深刻的现象的核心。从水的飞溅,到火焰和烟雾的旋转,流体已经......
  • HDU3487 Play With Chain
    题目链接  题目大意就是要我们对一个区间执行区间翻转和整体移动区间的操作。  思路:将一个区间分裂出来再移动到另一个节点的后面,可以用\(fhq-treap\)来将这一个子树......
  • 使用 Apollo Server 和 Koa 合并 GraphQL Schema
    使用ApolloServer和Koa合并GraphQLSchema今天,在我们现代的开发者世界中,完全无法想象没有React、NodeJS、GraphQL等技术的生活。他们拥有稳固的队伍,并在数据交......
  • 在 GraphXR 中可视化 Jira
    在GraphXR中可视化Jira作为一家完全远程、分布在全球的公司,我对同事的日常活动的了解有限。他们现在在做什么?谁在支持哪些客户?我们能否找到针对特定问题的合作集群?在各......