100211D Police Cities
分析
看到这个题我们的第一反应自然是Tarjan缩点,在这之后我们可以发现实际只要在缩点之后所有出度或入度为0的点布置警察局就可以达到要求,我们用dpij表示考虑前i个出度或入度为0的点共布置了j个警察局,s[i]表示这个点原先由几个点构成,tot表示出度或入度为0的点的总数,所以不难得到转移方程
所以不难得到最终答案
注意此题需要使用高精度。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define sp cout<<"---------------------------------------------------"<<endl
struct mint {
int _[],__;
};
mint operator + (mint _x,mint _y){
int _k,_g=,_i;
mint _z;
for(_i=_x.__+;_i<=;_i++)_x._[_i]=;
for(_i=_y.__+;_i<=;_i++)_y._[_i]=;
if(_x.__>_y.__)_k=_x.__;
else _k=_y.__;
for(_i=;_i<=_k;_i++){
_z._[_i]=(_x._[_i]+_y._[_i]+_g)%;
_g=(_x._[_i]+_y._[_i]+_g)/;
}
if(_g>){
_z._[++_k]=_g;
}
_z.__=_k;
return _z;
}
mint operator * (mint _x,mint _y){
int _k,_g=,_i,_j;
mint _z;
for(_i=_x.__+;_i<=;_i++)_x._[_i]=;
for(_i=_y.__+;_i<=;_i++)_y._[_i]=;
_k=_x.__+_y.__-;
for(_i=;_i<=;_i++)
_z._[_i]=;
for(_i=;_i<=_x.__;_i++)
for(_j=;_j<=_y.__;_j++)
_z._[_i+_j-]+=_x._[_i]*_y._[_j];
for(_i=;_i<=_k;_i++){
int _a=_z._[_i]+_g;
_z._[_i]=_a%;
_g=_a/;
}
while(_g){
_z._[++_k]=_g%;
_g/=;
}
while(_k>&&_z._[_k]==)_k--;
_z.__=_k;
return _z;
}
mint read(){
mint _x;
string _s;
int _L,_i;
for(_i=;_i<=;_i++)
_x._[_i]=;
cin>>_s;
_L=_s.length();
for(_i=;_i<=_L;_i++)
_x._[_i]=_s[_L-_i]-'';
_x.__=_L;
return _x;
}
void pr(mint _x){
int _i;
for(_i=_x.__;_i>;_i--)
printf("%d",_x._[_i]);
puts("");
}
void test(){
mint _a,_b;
_a=read(),_b=read();
_a=_a+_b;
pr(_a);
}
int n,m,K,sum,s[],dfn[],low[],ist[],cnt,belong[];
int tot,o_d[],i_d[],wh[];
mint dp[][],c[][];
stack<int>a;
vector<int>o_v[];
vector<int>v[];
inline void tarjan(int x){
dfn[x]=low[x]=++cnt;
a.push(x);
ist[x]=;
for(int i=;i<o_v[x].size();i++)
if(!dfn[o_v[x][i]]){
tarjan(o_v[x][i]);
low[x]=min(low[x],low[o_v[x][i]]);
}else if(ist[o_v[x][i]]){
low[x]=min(low[x],dfn[o_v[x][i]]);
}
if(low[x]==dfn[x]){
sum++;
while(){
int u=a.top();
a.pop();
ist[u]=;
s[sum]++;
belong[u]=sum;
if(u==x)break;
}
}
}
int main(){
freopen("police.in","r",stdin);
freopen("police.out","w",stdout);
int i,j,k;
//test();
for(i=;i<=;i++)
for(j=;j<=;j++){
c[i][j]._[]=;
c[i][j].__=;
}
for(i=;i<=;i++){
c[i][]._[]=;
c[i][].__=;
c[i][i]._[]=;
c[i][i].__=;
}
for(i=;i<=;i++)
for(j=;j<i;j++)
c[i][j]=c[i-][j-]+c[i-][j];
scanf("%d%d%d",&n,&m,&K);
for(i=;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
o_v[x].push_back(y);
}
for(i=;i<=n;i++)
if(!dfn[i])tarjan(i);
for(i=;i<=n;i++)
for(j=;j<o_v[i].size();j++)
if(belong[i]!=belong[o_v[i][j]]){
v[belong[i]].push_back(belong[o_v[i][j]]);
o_d[belong[i]]++;
i_d[belong[o_v[i][j]]]++;
}
int ant=;
for(i=;i<=sum;i++)
if(!o_d[i]||!i_d[i]){
tot++;
wh[tot]=i;
}else ant+=s[i];
for(i=;i<=;i++)
for(j=;j<=;j++){
dp[i][j].__=;
dp[i][j]._[]=;
}
dp[][]._[]=;
dp[][].__=;
for(i=;i<=tot;i++)
for(j=;j<=K;j++)
for(k=;k<=s[wh[i]];k++)
dp[i][j]=dp[i][j]+(dp[i-][j-k]*c[s[wh[i]]][k]);
mint ans;
ans.__=;
ans._[]=;
for(i=tot;i<=K;i++)
ans=ans+(dp[tot][i]*c[ant][K-i]);
pr(ans);
return ;
}
100211D Police Cities的更多相关文章
- ZOJ 2699 Police Cities
Police Cities Time Limit: 10 Seconds Memory Limit: 32768 KB Once upon the time there lived a ki ...
- Codeforces Round #130 (Div. 2) C - Police Station 最短路+dp
题目链接: http://codeforces.com/problemset/problem/208/C C. Police Station time limit per test:2 seconds ...
- Codeforces Round #408 (Div. 2) D - Police Stations
地址:http://codeforces.com/contest/796/problem/D 题目: D. Police Stations time limit per test 2 seconds ...
- CF796D Police Stations 思维
Inzane finally found Zane with a lot of money to spare, so they together decided to establish a coun ...
- Connect the Cities[HDU3371]
Connect the Cities Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- codeforces 613D:Kingdom and its Cities
Description Meanwhile, the kingdom of K is getting ready for the marriage of the King's daughter. Ho ...
- CF449B Jzzhu and Cities (最短路)
CF449B CF450D http://codeforces.com/contest/450/problem/D http://codeforces.com/contest/449/problem/ ...
- Karma Police - Radiohead
音乐赏析似乎是一件没有意义的工作,与电影相比音乐更加抽象,不同的人对同一首歌会有完全不同的解读. 但一首歌一旦成为经典,就有解读它的必要,因为它一定诉出了一个群体的某些情绪. Karma police ...
- hdu 2874 Connections between cities [LCA] (lca->rmq)
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
随机推荐
- @angular/cli项目构建--组件
环境:nodeJS,git,angular/cli npm install -g cnpm --registry=https://registry.npm.taobao.org cnpm instal ...
- lower_bound()函数与quicksort()函数的简单掌握
lower_bound 这个序列中可能会有很多重复的元素,也可能所有的元素都相同,为了充分考虑这种边界条件,STL中的lower_bound算法总体上是才用了二分查找的方法,但是由于是查找序列中的第一 ...
- CommonJS 规范
CommonJS 是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比如在服务器和桌面环境中. 这个项目最开始是由 Mozilla 的工程师 Kevin Dangoor 在2 ...
- Vue 将样式绑定到一个对象让模板更清晰
Vue 将样式绑定到一个对象让模板更清晰 <div id="app"> <div v-bind:style="styleObject"> ...
- linux NTP配置
时间是由计算机内的石英晶体振荡电路以:NetworkTimeProtocol(NTP):通常情况下,时间同步是按以下步骤进行的::(1):NTP客 户端向NTP服务器发出一个时间请:(2):当服务器接 ...
- DOM对象和JQuery对象互转
实现点击某一个单元格,将单元格内部的sql提交执行: <td onclick="submitSqlExecute(this)">...<span>${ctx ...
- 蓝桥杯 算法训练 ALGO-139 s01串
算法训练 s01串 时间限制:1.0s 内存限制:256.0MB 问题描述 s01串初始为”0” 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01 ...
- 机器学习:PCA(基础理解、降维理解)
PCA(Principal Component Analysis) 一.指导思想 降维是实现数据优化的手段,主成分分析(PCA)是实现降维的手段: 降维是在训练算法模型前对数据集进行处理,会丢失信息. ...
- declare handler 声明异常处理的语法
声明异常处理的语法 DECLARE {EXIT | CONTINUE} HANDLER FOR {error-number | SQLSTATE error-string | condition} S ...
- VisualGDB系列11:Linux C++项目中使用外部Linux库
根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 在<使用VS创建Linux静态库和 ...