2018年1月26日训练日记

今天基本完成了图论专题的题目。19/20

剩下的一道bomb 感觉是求出每个用TarJan求出每个强连通分量,然后在缩点图里找入度为0的点累计费用。(不过由于未知原因没搞过样例)

其中有8个欧拉路的题,其中有记录路径的。输出路径注意输出边和输出点一个放循环里面一个放循环外面。输出字典序小的需要先用数组存起来然后倒序输出。(因为欧拉函数输出的路径是从起点开始逆序的)

有4个强连通分量题。除没做的那道题外,其他的都是问最少添加几条边使得图变成连通。直接用TarJan算法缩点,然后对于缩点图,求入度为0的点的个数和出度为0的点的个数,这两者最大值即为答案。注意模板不要打错。

有4个拓扑排序的题目。拓扑排序主要还是模板,有时候结合并查集运用(图论里面好多题目都涉及到并查集)

1道无向图求桥的题目,直接TarJan求即可,注意特殊情况。

1道差分约束,感觉核心就是从题目出提出相应的不等式化为标准形式(不能漏),然后用spfa求最短路或最长路即可。

1道很简单的2-SAT,一定注意模板不要打错,然后对限制条件建立相应的边。

1道数学题(不知道怎么混进图论专题里的),就是求一个区间里所有因数个数为素数的数。对于素数,它的因数只有2个(即1和它本身),所以素数一定符合条件。对于合数,就一个公式就是合数的因数个数等于它能整除的各个素数的指数+1的乘积。例:15的因数个数。15=3^1*5^1,(1+1)*(1+1)=4个。

代码如下:

#include<iostream>
#include<cmath>
#include<fstream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<string>
#include<queue>
#include<vector>
#include<iomanip>
#include<map>
#include<bitset>
#define lson l,mid,t<<1
#define rson mid+1,r,t<<1|1
#define ll long long
using namespace std;
const int mx=100100;
const int mxt=500100;
const int inf=0x3f3f3f3f;
int n,m,sum[mx],cnt,nn,mm;
int fa[mx],c[mx];
int pre[201000];
void init()
{
    cnt=0;
    int i,j;
    memset(pre,0,sizeof(pre));
    pre[0]=pre[1]=1;
    for(i=2;i<=200000;i++)
    {
        if(!pre[i]){
        for(int j=2;j*i<=200000;j++)
        {
         pre[i*j]=1;
        }
        }
    }
}
bool jud(int x)
{
    if(x==1) return 0;
    if(!pre[x]) return 1;
    int cnt=1,e,i;
    for(int i=2;i<=x/2;i++)
    {
        if(!pre[i]&&(x%i==0))
        {
            e=0;
            int tx=x;
            do{
                e++;
                tx/=i;
            }while(tx%i==0);
            cnt*=(e+1);
        }
    }
    if(pre[cnt]) return 0;
    else return 1;
}
int main()
{
    int T,cas;
    init();
    while(scanf("%d",&T)!=EOF)
    {
        while(T--)
    {
    bool j=0;
    scanf("%d%d",&m,&n);
    if(m>n) swap(n,m);
    for(int i=m;i<=n;i++)
    {
        if(j&&jud(i)){printf(" %d",i);}
        else if(jud(i)){j=1;printf("%d",i);}
    }
    if(!j)puts("-1");
    else puts("");
    }
    }
    return 0;
}

至于晚上的比赛,日常三题。两道暴力,一道坑逼题目,(j-i)<=2就能过,然而其实要对每组数据(j-i)<=n(n<=10000),否则会TLE。第二题是字典树+拓扑排序,大佬的代码已保存,等回去研究研究。。。

加油。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值