Codeforces Round #453 (Div. 2) a-c
阿新 • • 發佈:2017-12-21
!= force gpo n) return sizeof size nod amp
A. Visiting a Friend
水題,但是需要註意段點初,及最後的位置
代碼如下:
#include <iostream> #include <stdio.h> #include <cmath> #include <string.h> #include <algorithm> using namespace std; const int N=107; int dis[N]; struct Node{ int st,ed; }a[N]; int cmp(Node c,Node d){ if(c.ed==d.ed)return c.st<d.st; return c.ed<d.ed; } int main() { int n,m; memset(dis,0,sizeof(dis)); scanf("%d%d",&n,&m); int flag=0; for(int i=0;i<n;i++) { scanf("%d%d",&a[i].st,&a[i].ed); for(int j=a[i].st;!flag&&j<=a[i].ed;j++) {if(a[i].st&&dis[a[i].st]==0) flag=1; else dis[j]++; } } if(dis[m]==0) flag=1; if(flag) puts("NO"); else puts("YES"); return 0; }
B. Coloring a Tree
額。。。也挺水的,dfs或bfs即可,起點任意一點即可
代碼如下:
#include <iostream> #include<stdio.h> #include <vector> #include <string.h> using namespace std; const int N=1e4+7; int vis[N]; vector<int>graph[N]; int c[N]; int res; void dfs(int r,int cl) { vis[r]=1; if(cl!=c[r])res++; for(int i=0;i<graph[r].size();i++) { if(!vis[graph[r][i]]) dfs(graph[r][i],c[r]); } } int main() { memset(vis,0,sizeof(vis)); int n,m,x; scanf("%d",&n); for(int i=2;i<=n;i++) { scanf("%d",&x); graph[i].push_back(x); graph[x].push_back(i); } for(int i=1;i<=n;i++) scanf("%d",&c[i]); res=0; dfs(1,-1); printf("%d\n",res); return 0; }
C. Hashing Trees
找到規律,發現當a[i]>1&&a[i-1]>1是該樹會出現異構,特判,第一棵樹輸出在某層的最後一個節點後連所有下一層的節點,以此類推。
找到出現異構的最底層,將這一層的進行修改(將第一個節點連在上一層的倒數第二位置上,其他節點連在上一層的最後位置上),其他層如第一棵樹相同。·
代碼如下:
#include <iostream> #include <stdio.h> using namespace std; const int N=1e5+7; int main() {v int h; int a[N]; scanf("%d",&h); for(int i=0;i<=h;i++) scanf("%d",&a[i]); int flag=0; int hc; for(hc=2;!flag&&hc<=h;hc++) { if(a[hc]>1&&a[hc-1]>1) { flag=1; break; } } if(!flag) puts("perfect"); else { puts("ambiguous"); int c=0; for(int i=0;i<=h;i++) { for(int j=1;j<=a[i];j++) printf("%d ",c); c+=a[i]; } printf("\n"); c=0; for(int i=0;i<=h;i++) { if(hc==i) { for(int j=1;j<=a[i];j++) { if(j==1) printf("%d ",c-1); else printf("%d ",c); } } else{ for(int j=1;j<=a[i];j++) printf("%d ",c); } c+=a[i]; } printf("\n"); } return 0; }
Codeforces Round #453 (Div. 2) a-c