cf #254 (Div. 2)

a题

#include<stdio.h>
#include<string.h>
char c[101][101];
int main()
{
    long n,m,i,j;
    scanf("%ld%ld",&n,&m);
    gets(c[0]);
    for(i=1;i<=n;i++)
        gets(c[i]);

    for(i=1;i<=n;i++)
        {
            for(j=0;j<m;j++)
                if(c[i][j]==‘-‘)
                    printf("-");
                else
                {
                    if((i%2)^(j%2))
                        printf("W");
                    else
                        printf("B");
                }
            printf("\n");
        }

    return 0;

}

b题 其实就是每个联通快的节点数减1,dfs,并查集都可以。

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

int p[100];
int n, m;

int find(int x)
{
    int s;
    for(s = x; p[s] >= 0; s = p[s]);
    while(s != x)
    {
        int tmp = p[x];
        p[x] = s;
        x = tmp;
    }
    return s;
}

int unionSet(int a, int b)
{
    int t1 = find(a);
    int t2 = find(b);
    int tmp = p[t1] + p[t2];
    if(p[t1] > p[t2])
    {
        p[t1] = t2;
        p[t2] = tmp;
    }
    else
    {
        p[t2] = t1;
        p[t1] = tmp;
    }
}

int main()
{
    while(scanf("%d%d", &n, &m) != EOF)
    {
        int a, b;
        for(int i = 0; i <= n; i++)
        {
            p[i] = -1;
        }
        for(int i = 0; i < m; i++)
        {
            scanf("%d%d", &a, &b);
            int r1 = find(a);
            int r2 = find(b);
            if(r1 != r2)
            {
                unionSet(a, b);
            }
        }
        int mul = 0;
        for(int i = 1; i <= n; i++)
        {
            if(p[i] < 0)
            {
                mul -= (p[i]+1);
            }
        }
        __int64 ans = pow(2.0, mul);

        printf("%I64d\n", ans);
    }
    return 0;
}

c题 求最小密度子图,这个在当时学最大密度子图的时候想过,其实就是一条边两个点,因为再添加一条边之后的密度要小于这两部分中最大的那个。

#include <stdio.h>
int n,m;
double vval[550],eval[500000];
int main()
{
    double ans=0;
    int i,j,u,v;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++) scanf("%lf",&vval[i]);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%lf",&u,&v,&eval[i]);
        if((vval[u]+vval[v])/eval[i]>ans)
            ans=(vval[u]+vval[v])/eval[i];
    }
    printf("%.9lf\n",ans);
    return 0;
}

cf #254 (Div. 2)

时间: 2024-10-13 01:01:23

cf #254 (Div. 2)的相关文章

CF #371 (Div. 2) C、map标记

1.CF #371 (Div. 2)   C. Sonya and Queries  map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的匹配. #include<bits/stdc++.h> #define max(a,b) a>b?a:b #define F(i,a,b) for (int i=a;i<=b;i++) #define mes(a,b) memset(a,b,sizeof(a)) #define INF

Codeforces Round #254 (Div. 2) B. DZY Loves Chemistry (并查集)

题目链接 昨天晚上没有做出来,刚看题目的时候还把题意理解错了,当时想着以什么样的顺序倒,想着就饶进去了, 也被题目下面的示例分析给误导了. 题意: 有1-n种化学药剂  总共有m对试剂能反应,按不同的次序将1-n种试剂滴入试管,如果正在滴入的试剂能与已经滴入 的试剂反应,那么危险数*2,否则维持不变.问最后最大的危险系数是多少. 分析:其实这个题根本不用考虑倒入的顺序,只是分块就行,结果就是每个子集里元素的个数-1 和  的2的幂. 1 #include <iostream> 2 #inclu

CF#247(Div. 2)部分题解

引言: 在软件项目中,Maven提供了一体化的类库管理系统,非常实用.但是,如果新增的类库jar在网络上无法获取到,如何在本地按照Maven的规则添加进来呢?本文将通过一个小例子展示新增过程. 背景介绍: 一个Maven管理的Java项目,提供一个系统级别的POM.xml,其中定义了整个项目使用的类库. 需求: 需要添加一个自定义的类库到当前项目中.假定当前的类库文件名为:abc.jar.. 如何将类库添加进来? 1.  找到当前Maven的Repository类库位置 一般默认情况下,在win

CF #375 (Div. 2) D. bfs

1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多少个湖,然后输出. #include<bits/stdc++.h> #define F(i,a,b) for (int i=a;i<b;i++) #define FF(i,a,b) for (int i=a;i<=b;i++) #define mes(a,b) memset(a,b,s

CF#254中文全题解简要版

xyz的英文题解更详细一点把.只是翻译一下. Div2A 奇偶染色 Div2B 考虑对答案的贡献 2^(n-联通块个数) Div1A 最优的情况是只选一条边 可以用反证法,考虑将导出子图分裂 Div1B 一句话:数量多从大到小暴力,数量少只扫1的位置. Div1C xyz集训队论文 Div1D 询问的串有出现次数多的暴力,都是出现次数少的归并 Div1E 看起来像E题的做法是 二分答案 然后边分建网络流图 跑的很快  [然后发现有人dsu排序复杂度过了.] CF#254中文全题解简要版,布布扣,

Codeforces Round #254 (Div. 2) DZY Loves Chemistry【并查集基础】

一开始不知道题意是啥意思,迟放进去反应和后放进去反应有什么区别 对于第三组数据不是很懂,为啥312,132的组合是不行的 后来发现这是一道考察并查集的题目 QAQ 怒贴代码: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostream> 6 #include <algorithm> 7

CF #374 (Div. 2) D. 贪心,优先队列或set

1.CF #374 (Div. 2)   D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优先队列 #include<bits/stdc++.h> #define F(i,a,b) for (int i=a;i<b;i++) #define FF(i,a,b) for (int i=a;i<=b;i++) #define mes(a,b) memset(a,b,sizeof(

B. Mr. Kitayuta&#39;s Colorful Graph (CF #286 (Div. 2) 并查集)

B. Mr. Kitayuta's Colorful Graph time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Mr. Kitayuta has just bought an undirected graph consisting of n vertices and m edges. The vertices of the g

Codeforces Round #254 (Div. 2)

Codeforces Round #254 (Div. 2) 题目链接 A题:给定一个棋盘,放B,W不能相邻,输出摆法 思路:模拟国际象棋,B放在白格,A放在黑格即可 B题:给定一些化学物品,给定哪些可以反应,现在一一加入试管,如果试管之前有加过可以反应的,危险度乘2,初始危险度为1,求最小危险度 思路:用并查集,找出有多少个集合,这些先加进去保证不会反应,那么剩下的一个个加进去都乘2即可 C题:求一个最小密度连通子图,子图必须为一个集合,并且两点存在的话,他们的边必须存在 思路:推一推公式发现