首页 > 其他分享 >AtCoder Beginner Contest 310

AtCoder Beginner Contest 310

时间:2023-07-16 21:33:10浏览次数:32  
标签:AtCoder Beginner int 310 队伍 st break flag 枚举

Peaceful Teams

\(n\)个运动员,要分成\(t\)个队伍,一共有\(m\)对人不能放在一支队伍里,求方案数,每支队伍至少需要有一个人

\(1 \leq t \leq n\leq 10\)

题解:DFS搜索

  • 通过数据范围考虑爆搜
  • 我们考虑枚举的顺序\(O(n!)\)
  • 我们对每个人\(c\)枚举将其加到当前的\(d\)支队伍中
  • 新开一支空的队伍将\(c\)加到新的队伍中
  • 每次\(O(t)\)枚举检查每支队伍中是否有组队冲突
const int N = 2e5 + 10, M = 4e5 + 10;

int n, m, t;
int st[15][15];
vector<int> g[15];
int ans;

void dfs(int c, int d)
{
    if (c == n)
    {
        if (d != t)
            return;
        bool flag = true;
        for (int i = 0; i < t; ++i) // 枚举每支队伍
        {
            for (auto u : g[i])
            {
                for (auto v : g[i])
                {
                    if (st[u][v] || st[v][u])
                    {
                        flag = false;
                        break;
                    }
                }
                if (!flag)
                    break;
            }
            if (!flag)
                break;
        }
        ans += flag;
        return;
    }
    for (int i = 0; i <= d; ++i)
    {
        g[i].push_back(c);
        dfs(c + 1, max(d, i + 1));
        g[i].pop_back();
    }
}

void solve()
{
    cin >> n >> t >> m;
    for (int i = 1; i <= m; ++i)
    {
        int a, b;
        cin >> a >> b;
        a--, b--;
        st[a][b] = st[b][a] = 1;
    }
    dfs(0, 0);
    cout << ans << endl;
}

标签:AtCoder,Beginner,int,310,队伍,st,break,flag,枚举
From: https://www.cnblogs.com/Zeoy-kkk/p/17558611.html

相关文章

  • AtCoder Regular Contest 092 E Both Sides Merger
    洛谷传送门AtCoder传送门Keyobservation:每个元素的下标奇偶性不改变。于是讨论最后一个数是下标为奇数还是偶数加起来的数。将下标奇偶性相同的元素分开考虑。对于下标奇偶性相同的元素,不难发现答案的上界是所有\(>0\)的元素之和(没有\(>0\)的元素时选一个最大的),并且一......
  • ABC310
    A题意给你\(n,p,q\)给你一个\(n\)长度的数组\(D\),返回\(\min(D_i+q,p)\)#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefpriority_queue<int>pq;typedefpair<int,int>PII;typedefpair<ll,ll>PLL;intn,p......
  • freee Programming Contest 2023(AtCoder Beginner Contest 310)
    freeeProgrammingContest2023(AtCoderBeginnerContest310)-AtCoderA-OrderSomethingElse(atcoder.jp)题意是在买一道菜的情况下可以将原为\(P\)元的饮料优惠到\(Q\)元,否则就按原价买#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signed......
  • AtCoder Beginner Contest 310
    (AtCoderBeginnerContest310) A-OrderSomethingElse思路:比较下打折和不打折的情况#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>PII;typedefpair<string,int>PSI;typedefpair<string,string>PSS;c......
  • 近期 AtCoder Beginner Contest 题目选做
    AtCoderBeginnerContest310Ehttps://atcoder.jp/contests/abc310/tasks/abc310_e我们要求所有区间的NAND之和,发现NAND最后只可能是\(0\)或\(1\),所以我们只需要计数区间NAND为\(1\)的即可。考虑dp,设\(f_{i,0/1}\)表示以\(i\)结尾的区间最后NAND和为\(0/......
  • [ABC310F]Make 10 Again
    [ABC310F]Make10Again题意给定\(N\)个骰子,每个骰子会随机的出现数字\(1\)到\(A_i\),求能够从\(N\)个骰子中选若干个,使他们的点数之和为\(10\)的概率。\(N\leqslant100\)Solution第一眼思路为设计状态\(dp(i,j)\)为前\(i\)个骰子,点数之和为\(j\)的概率。......
  • freee Programming Contest 2023(AtCoder Beginner Contest 310)题解
    点我看题A-OrderSomethingElse直接比较\(P\)和\(Q+min(D_i)\),输出较小值即可。点击查看代码#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<n;++i)#definerepn(i,n)for(inti=1;i<=n;++i)#defineLLlonglong#definefifirst#definesesecond#defi......
  • AtCoder Beginner Contest 310
    目录题目传送门:abc310比赛摘记:B题没读懂题意。。。如此简单题卡了好久继续加油哈......
  • Atcoder Regular Contest 118 F - Growth Rate
    想到插值其实就挺套路的了吧……设\(dp_{i,j}\)表示有多少种方法确定\(a_i\sima_n\)使得\(a_i=j\)。那么有\(dp_{i,j}=\sum\limits_{k\geja_i}dp_{i+1,k}\)。边界条件是\(dp_{n+1,1\simm}=1\)。不难发现复杂度与值域有关,一眼过不去的样子。考虑优化,记\(lim_i\)满足......
  • Atcoder AGC062C Mex of Subset Sum
    对\(a_i\)从小到大进行排序,因为想到若\(<a_{i-1}\)的不能取到的数因为\(a_i>a_{i-1}\)肯定是能保证取不到的。对排完序的\(a_i\)做一个前缀和\(s_i=\sum\limits_{j=1}^n\),令\(A_i\)为\(a_{1\simi}\)中无法表示为子序列之和且\(<s_i\)的正整数的集合......