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 ...
随机推荐
- 《深入理解 C# 第2版》 - 书摘精要
(P13) 在很大程度上,C# 2 更像是对 C# 1 的各种不足之处的修修补补,所以并没有一鸣惊人.而 C# 3 中几乎所有特性都是为了构建 LINQ,并且其结果也十分特别: (P24) 为了让委托 ...
- (转)关于Linux核心转储文件 core dump
所谓核心转储文件是内含进程终止时内存映像的一个文件.产生条件:特定的信号会引发进程创建一个核心转储文件并终止运行. 包括哪些特定信号,请参见http://man7.org/linux/man-page ...
- InnoDB引擎的特点及优化方法
1.什么是InnoDB引擎? InnoDB引擎是MySQL数据库的另一个重要的存储引擎,正成为目前MySQL AB所发行的新版的标准,被包含在所有二进制安装包里,和其他存储引擎相比,Inno ...
- 使用Visio画UML模型
Microsoft Office Visio“UML 模型图” 模板为创建复杂软件系统的面向对象的模型 (模型:建模系统的一种抽象表示,它从特定的视角并在某一抽象级别上指定建模系统.) 提供全面的支持 ...
- php代码性能分析
最近在项目中嵌入wordpress,发现wordpress效率非常低,针对此问题进行了部分优化. 1.首先增加redis缓存,通过index.php入口处进行全页面缓存(数据量不大,数据更新频率低,因 ...
- C# 代码注释和Config文件中,特殊符号的书写方法。
App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...
- openvswitch以及docker网络
修改docker0的IP,教程写的是/etc/default/docker文件,但是那是过时的配置,真正的配置是在/etc/docker/daemon.json,格式是json的: { "r ...
- Angular5学习笔记 - 创建组件(四)
一.创建组件 ng generate component component-name #简写 ng g c component-name ng generate directive|pipe|ser ...
- My97DatePicker 和转换 数据库中日期(/Date(1351699200000)/) 的格式
一 转换 数据库中日期(/Date(1351699200000)/) 的格式: C#中转换日期格式 var date=com.CREATEDATETIME.ToString(); JavaScrip ...
- Ubuntu 开启telnet、ftp服务
Telnet 这里我们就来对Ubuntu Linux telnet的安装设置进行一下讲解. 1. sudo apt-get install xinetd telnetd 2. Ubuntu Linux ...