套路(拓扑排序)

/*
对每个联通块单独考虑。
每个联通块是一个环套树,树边拎出来可以随意定向,记树边为 m,所以树的方案数为2^m 。
对于环来说只有两种方向,顺时针和逆时针,记环边为 n,所以环的方案就是 2^n - 2。
最后把每个联通块的方案乘起来即可。
注意,自环无论如何定向都是环,但这并不违反环的公式,故可以不特判。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 200010
#define mod 1000000007
int con[maxn],deg[maxn],seq[maxn];
int n,m;
long long ans;
long long Pow(long long a,long long b){
long long res=;
while(b){
if(b&)res=res*a%mod;
a=a*a%mod;
b>>=;
}
return res;
}
void dfs(int x){
m++;
deg[x]=;
if(deg[con[x]])dfs(con[x]);
}
int main(){
freopen("road.in","r",stdin);freopen("road.out","w",stdout);
//freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&con[i]);
deg[con[i]]++;
}
int h=,t=;
for(int i=;i<=n;i++){
if(!deg[i])seq[++t]=i;
}
while(h<=t){
int to=con[seq[h]];
deg[to]--;
if(!deg[to])seq[++t]=to;
++h;
}
ans=Pow(,t);
for(int i=;i<=n;i++){
if(deg[i]){
m=;
dfs(i);
ans=(ans*(Pow(,m)-))%mod;
}
}
ans=(ans+mod)%mod;
cout<<ans;
}

100分 拓扑排序

exLCS(动态规划)

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000010
#define INF 0x7fffffff
using namespace std;
char a[],b[maxn];
int f[][],nxt[maxn][];
int n,m;
void solve(){
f[][]=nxt[][a[]-'a'];
for(int i=;i<=n;i++)f[i][]=-;
for(int i=;i<n-;i++)
for(int j=;j<=n&&f[i][j]<INF;j++){
f[i+][j]=min(f[i+][j],f[i][j]);
if(j<n)f[i+][j+]=min(f[i+][j+],nxt[f[i][j]+][a[i+]-'a']);
}
}
int main(){
freopen("lcs.in","r",stdin);freopen("lcs.out","w",stdout);
scanf("%s%s",a,b);
n=strlen(a);m=strlen(b);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
f[i][j]=INF;
for(int i=;i<;i++)nxt[m][i]=INF;
for(int i=m-;i>=;i--){
memcpy(nxt[i],nxt[i+],sizeof(nxt[i]));
nxt[i][b[i]-'a']=i;
}
solve();
int ans=;
for(int i=n;i;i--)
if(f[n-][i]<INF){
ans=i;
break;
}
cout<<ans;
}

100分 dp

魔方(模拟)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> int c[],n,flag=false,out[],ans; inline void read(int &now)
{
char Cget;now=;while((Cget=getchar())<''&&Cget>'');
while(Cget>=''&&Cget<='')now=now*+Cget-'',Cget=getchar();
} void operation_A()
{
int tmp,tmp2;
tmp=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=tmp;
tmp=c[],tmp2=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=c[];
c[]=c[],c[]=c[],c[]=tmp2,c[]=tmp;
} void operation_B()
{
int tmp,tmp2;
tmp=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=tmp;
tmp=c[],tmp2=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=c[];
c[]=c[],c[]=c[],c[]=tmp2,c[]=tmp;
} void operation_C()
{
int tmp=c[],tmp2;
c[]=c[],c[]=c[],c[]=c[],c[]=tmp;
tmp=c[],tmp2=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=c[];
c[]=c[],c[]=c[],c[]=tmp,c[]=tmp2;
} bool check()
{
return c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[];
} void dfs(int now,int last)
{
if(check())
{
flag=true,ans=now;
return;
}
if(now>=n) return;
if(last!=)
{
for(int i=;i<=;i++)
{
operation_A();
out[now+]=i;
dfs(now+,);
if(flag) return;
}
operation_A();
}
if(last!=)
{
for(int i=;i<=;i++)
{
operation_B();
out[now+]=+i;
dfs(now+,);
if(flag) return;
}
operation_B();
}
if(last!=)
{
for(int i=;i<=;i++)
{
operation_C();
out[now+]=+i;
dfs(now+,);
if(flag) return;
}
operation_C();
}
} void dfs2(int now,int last)
{
if(check())
{
flag=true,ans=now;
return;
}
if(now>=n) return;
if(last!=)
{
for(int i=;i<=;i++)
{
operation_A();
out[now+]=i;
dfs(now+,);
if(flag) return;
}
operation_A();
}
if(last!=)
{
for(int i=;i<=;i++)
{
operation_B();
out[now+]=+i;
dfs(now+,);
if(flag) return;
}
operation_B();
}
} int main()
{
freopen("cube.in","r",stdin);
freopen("cube.out","w",stdout);
read(n);
for(int i=;i<=;i++) read(c[i]);
if(n<=)
{
dfs(,);
for(int i=;i<=ans;i++) printf("%d ",out[i]);
}
else
{
if(n<=) dfs2(,);
if(!flag) dfs(,);
for(int i=;i<=ans;i++) printf("%d ",out[i]);
}
fclose(stdin),fclose(stdout);
return ;
}

100分 模拟

2017-10-5 清北刷题冲刺班p.m的更多相关文章

  1. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  2. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  3. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  4. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  5. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  6. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  7. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

  8. 2017-10-7 清北刷题冲刺班p.m

    测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...

  9. 2017-10-7 清北刷题冲刺班a.m

    测试 A 消失的数字 文件名 输入文件 输出文件 时间限制 空间限制del.cpp/c/pas del.in del.out 1s 512MB题目描述现在,我的手上有 n 个数字,分别是 a 1 ,a ...

  10. 2017-10-1 清北刷题冲刺班a.m

    位运算1 (bit) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥 ...

随机推荐

  1. chrome浏览器的跨域设置-包括版本49前后两种设置 ,windows&mac

    做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程.但是新版本的chrome浏览器提 ...

  2. 通过rtmpdump推送海康视频流到red5服务器

    现在主流的网络摄像机都支持标准H264视频格式,例如 海康网络摄像机, 通过海康提供的网络SDK可以获取到视频码流.我测试的这款相机,视频编码采用的是H264,音频编码采用的是G711a. 这里,我仅 ...

  3. ACM学习历程—POJ3565 Ants(最佳匹配KM算法)

    Young naturalist Bill studies ants in school. His ants feed on plant-louses that live on apple trees ...

  4. [Ural1099]工作安排 带花树

    题目大意 一般图最大匹配. 题解: 求解一般图最大匹配. 直接使用带花树即可. (带花树也是刚学)... 马上写带花树的ppt,会很通俗易懂. (充分证明了本苣智商不够,写不出高深的课件) 如果有想要 ...

  5. UNITY_MATRIX_IT_MV[Matrix]

    http://blog.csdn.net/cubesky/article/details/38682975 前面发了一篇关于unity Matrix的文章. http://blog.csdn.NET/ ...

  6. BZOJ1217:[HNOI2003]消防局的设立

    我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...

  7. 修改MySQL的时区,涉及参数time_zone (转)

    首先需要查看mysql的当前时区,用time_zone参数 mysql> show variables like '%time_zone%'; +------------------+----- ...

  8. 创建Azure Blob Snapshot的脚本

    在前面的文章中介绍了如何创建Azure Blob Snapshot.那篇文章中创建的脚本思路是:遍历所有Storage Account,找到所有vhd文件,进行Snapshot的创建. 但这种方式不够 ...

  9. web攻击之六:DNS攻击原理与防范

    随着网络的逐步普及,网络安全已成为INTERNET路上事实上的焦点,它关系着INTERNET的进一步发展和普及,甚至关系着INTERNET的生存.可喜的是我们那些互联网专家们并没有令广大INTERNE ...

  10. Linux编程里getopt_long_only函数用法详解

    在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子.下面介绍使用getopt_long_only和getopt_long(两者用法差不多)解析命令行选项. 程序中主 ...