Codeforces Round #203 (Div. 2)
A:超级大水题,不解释:
代码:
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int a,b; 5 int main() 6 { 7 int n,m,ma=0,mi=9999999,mb=9999999; 8 cin>>n>>m; 9 for(int i=0; i<n; i++) 10 { 11 cin>>a; 12 if(a>ma)ma=a; 13 if(a<mi)mi=a; 14 } 15 for(int i=0; i<m; i++) 16 { 17 cin>>b; 18 if(mb>b)mb=b; 19 } 20 if(mi*2>ma)ma=mi*2; 21 if(ma>=mb)cout<<"-1"; 22 else cout<<ma; 23 return 0; 24 }
B:很简单,打个标记,dfs解决;
1 #include<cstdio> 2 #include<vector> 3 #include<algorithm> 4 #define maxn 100005 5 using namespace std; 6 vector<int>ve[maxn]; 7 int belong[maxn],to[maxn]; 8 bool vis[maxn],dead[maxn]; 9 void dfs(int x,int f) 10 { 11 if(to[x]==0||belong[to[x]]==1||dead[to[x]])return; 12 ve[f].push_back(to[x]); 13 dfs(to[x],f); 14 } 15 16 int main() 17 { 18 int n; 19 scanf("%d",&n); 20 for(int i=1; i<=n; i++)scanf("%d",&belong[i]); 21 for(int i=1; i<=n; i++) 22 { 23 scanf("%d",&to[i]); 24 if(to[i]!=0) 25 { 26 if(vis[to[i]]) 27 dead[to[i]]=1; 28 else vis[to[i]]=1; 29 } 30 } 31 for(int i=1; i<=n; i++) 32 { 33 if(belong[i]==1) 34 { 35 ve[i].push_back(i); 36 dfs(i,i); 37 } 38 } 39 int ma=0,k; 40 for(int i=1; i<=n; i++)if(ve[i].size()>ma) 41 { 42 ma=ve[i].size(); 43 k=i; 44 } 45 printf("%d ",ma); 46 for(int i=ma-1; i>=0; i--)printf("%d ",ve[k][i]); 47 return 0; 48 }