传送门:
http://www.lydsy.com/JudgeOnline/problem.php?id=1002
http://www.lydsy.com/JudgeOnline/problem.php?id=1192
http://www.lydsy.com/JudgeOnline/problem.php?id=1083
http://www.lydsy.com/JudgeOnline/problem.php?id=1854
http://www.lydsy.com/JudgeOnline/problem.php?id=1433
#ID:zky
#OJ:BZOJ
#Index:1002
#Lanuage:Python
f=[0]*111
f[1]=1
f[2]=5
n=int(raw_input())
for i in range(3,n+1):
f[i]=3*f[i-1]+2
f[i]-=f[i-2]
print f[n]
#include<cstdio>
#include<cmath>
int main(){
int n;
scanf("%d",&n);
printf("%d\n",int(log2(n)+1));
}
/*
ID:zky
OJ:BZOJ
Index:1083
Language:C++
*/
#include<vector>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct edge{
int u,v,w;
bool operator<(const edge &a)const{
return w<a.w;
}
};
vector<edge>edges;
int fa[100001];
int find(int x){
if(fa[x])return fa[x]=find(fa[x]);
return x;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int u,v,w;
cin>>u>>v>>w;
edges.push_back((edge){u,v,w});
}
int ans=0;
int answ=0;
sort(edges.begin(),edges.end());
for(int i=0;i<m;i++){
if(find(edges[i].u)!=find(edges[i].v)){
fa[find(edges[i].u)]=find(edges[i].v);
ans++;
answ=max(answ,edges[i].w);
}
}
cout<<ans<<" "<<answ<<endl;
return 0;
}
/*
ID:zky
OJ:BZOJ
Index:1854
Language:C++
*/
#include<vector>
#include<bitset>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
bitset<1000002>vis;
int Link[1000002];
vector<vector<int> >w(10002);
bool find(int x){
for(int i=0;i<w[x].size();i++){
if(!vis[w[x][i]]){
vis[w[x][i]]=1;
if(!Link[w[x][i]]||find(Link[w[x][i]])){
Link[w[x][i]]=x;
return true;
}
}
}
return false;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int a,b;
scanf("%d%d",&a,&b);
w[a].push_back(i);
w[b].push_back(i);
}
for(int i=1;i<=10001;i++){
//memset(vis,0,sizeof(vis));
vis=0;
if(!find(i)){
cout<<i-1<<endl;
return 0;
}
}
return 0;
}
/*
ID:zky
OJ:BZOJ
Index:1433
Language:C++
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int vis[1010];
int Link[1010];
int w[51][51];
int map[51][51];
int school[51];
int Left[51];
int n;
bool find(int x){
for(int i=1;i<=n;i++){
if(w[x][i]&&!vis[i]){
vis[i]=1;
if(!Link[i]||find(Link[i])){
Link[i]=x;
return true;
}
}
}
return false;
}
int main(){
int T;
cin>>T;
while(T--){
memset(Link,0,sizeof(Link));
memset(w,0,sizeof(w));
memset(map,0,sizeof(map));
memset(school,0,sizeof(school));
memset(Left,0,sizeof(Left));
cin>>n;
int l=0;
for(int i=1;i<=n;i++)cin>>school[i];
for(int i=1;i<=n;i++)cin>>Left[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>map[i][j];
for(int i=1;i<=n;i++){
if(Left[i]&&school[i])l++;
if(Left[i]&&school[i])continue;
if(school[i])
w[i][i]=1;
for(int j=1;j<=n;j++){
if(map[i][j]&&school[j]){
w[i][j]=1;
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
if(find(i))ans++;
}
char s1[]={94,95,94};
char s2[]={84,95,84};
if(ans==n-l){
cout<<"^_^"<<endl;
}else
cout<<"T_T"<<endl;
}
return 0;
}