CSU 1617: Itself is Itself(强连通缩点)思想转换到图论
来源:互联网 发布:阿里云cdn节点ip 编辑:程序博客网 时间:2024/06/04 18:26
1617: Itself is Itself
Time Limit: 6 Sec Memory Limit: 128 MBSubmit: 21 Solved: 4
[Submit][Status][Web Board]
Description
Zuosige always has bad luck. Recently, he is in hospital because of pneumonia. While he is taking his injection, he feels extremely bored. However, clever Zuosige comes up with a new game.
Zuosige writes an integer n and a polynomial function:
P(x) = (a0+a1*x+a2*x2+…+am*xm) mod n.
He wants to know how many subsets of set {0, 1, 2, … , n-2, n-1} satisfies following property: the range of P(x) from the subset is itself. Pay attention to that empty set is also a valid subset.
Input
The first line contains one integer T, indicating the number of test cases.
In one test case, there are two lines.
In the first line, there are two integers n and m (1<=n<=10000, 1<=m<=1000).
In the second line, there m+1 integers. The i-th integer indicating ai-1 (0<=ai<=10000).
Output
For each test case, output an integer in a line indicating the answer. The answer can be very large, so you need just output the answer mod 1e9+7.
Sample Input
23 10 13 11 1
Sample Output
82
HINT
Source
#include<stdio.h>#include<vector>#include<string.h>using namespace std;#define modd 1000000007const int N= 10005;int n,c[N];int dfn[N],low[N],Stack[N],flag[N],vist[N],num[N],top,deep,tn;vector<int>mapt1[N];void init(){ for(int i=0;i<=n;i++) { mapt1[i].clear(); dfn[i]=0; num[i]=0; vist[i]=0; } tn=top=deep=0;}int tt;void tarjan(int u){ vist[u]=tt; deep++; dfn[u]=low[u]=deep; Stack[++top]=u; int len=mapt1[u].size(); for(int i=0;i<len;i++) { int v=mapt1[u][i]; if(vist[v]==0) { tarjan(v); if(low[u]>low[v]) low[u]=low[v]; } else if(vist[v]==tt&&low[u]>dfn[v])//注意vist[v]==tt low[u]=dfn[v]; } if(low[u]==dfn[u]) { tn++; while(u!=Stack[top]) { flag[Stack[top]]=tn; num[tn]++;top--; } flag[Stack[top]]=tn; num[tn]++; top--; }}int out[N];int rebuilMap()//用强连通缩点,{ tt=0; for(int i=0;i<n;i++) if(vist[i]==0) { tt++; tarjan(i); } memset(out,0,sizeof(out));//缩点后的图无 有向环 for(int i=0;i<n;i++) { int u=flag[i]; for(int j=0;j<mapt1[i].size();j++) { int v=flag[mapt1[i][j]]; if(u==v) continue; out[u]++; } } int number=0; for(int i=1;i<=tn;i++) if(out[i]==0) number++; return number;}int main(){ int T,m; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); for(int i=0;i<=m;i++){ scanf("%d",&c[i]); c[i]%=n; } init(); for(int i=0;i<n;i++) { int ansa=c[0],x=i; for(int j=1;j<=m;j++){ ansa=(ansa+c[j]*x)%n; x=(x*i)%n; } if(i!=ansa) mapt1[i].push_back(ansa); } int number=rebuilMap(); long long ans = 1; for(int i=1;i<=number;i++) ans=(ans*2)%1000000007; printf("%lld\n",ans); } return 0;}
- CSU 1617: Itself is Itself(强连通缩点)思想转换到图论
- Itself is Itself(scu1617)
- 强连通缩点
- 强连通缩点
- poj 2762 (强连通缩点)
- hdu 5934(强连通缩点)
- HDU5934 Bomb(强连通缩点)
- HDU5934Bomb(强连通缩点)
- HDU2767 强连通缩点
- poj1236强连通缩点
- Semiconnected--强连通缩点
- 强连通缩点 hdu3072
- NYOJ 120 校园网络(强连通缩点)
- poj 3160(强连通缩点 + dp)
- codeforces #427C Checkposts(强连通缩点)
- poj 1236 Network of Schools(强连通缩点)
- poj 2186 (强连通缩点传递关系)
- poj3592--Instantaneous Transference(强连通缩点+spfa)
- date0404/ThisTest.java
- Win7 64位编译Python扩展解决”error: Unable to find vcvarsall.bat”问题
- 3.4 Iterator(迭代器) -- 对象行为型模式
- date0405/DuiXiangChuShiHuaGuoCheng.java
- T- SQL性能优化详解
- CSU 1617: Itself is Itself(强连通缩点)思想转换到图论
- 安卓实习期间整理知识点(十三)
- date0405/EhanshiLanhanshi.java
- date0405/SingleDemo.java
- Linux下的管道编程
- OC--面向对向的三大特性(二)
- 字符串反转实现的几种方式
- JAVA学习第7天(2)java当中的异常2
- How to upload your project to GitHub