Replay:
Dup4:
- 时间复杂度算不对? 一点点思路不经过验证就激动的要死? 浪费自己一个小时还浪费别人一个小时?
- 对1e3不敏感? 1e3 * 1e3是多少? 模拟建边跑dp不写非要写个大模拟?
- 看到数据结构就高兴的要死? 没细想? 没发现性质?
X:
- 日常语文差, 导致计算几何死都写不对 读题要细致啊!
- 感觉状态还可以?只是计算几何写太久了, 人都懵了
A:Cactus Draw
Solved.
按照BFS序以及深度排
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 const int maxn = 1e4 + 10; 6 7 struct Edge{ 8 int to, nxt; 9 Edge(){} 10 Edge(int to, int nxt) :to(to), nxt(nxt){} 11 }edge[maxn << 1]; 12 13 struct node{ 14 int x, y; 15 node(){} 16 node(int x, int y):x(x), y(y){} 17 }ans[maxn]; 18 19 int n, m; 20 int head[maxn], tot; 21 int vis[maxn]; 22 int level[maxn]; 23 24 void Init() 25 { 26 tot = 0; 27 memset(vis, 0, sizeof vis); 28 memset(level, 0, sizeof level); 29 memset(head, -1, sizeof head); 30 } 31 32 void addedge(int u,int v) 33 { 34 edge[tot] = Edge(v, head[u]); head[u] = tot++; 35 edge[tot] = Edge(u, head[v]); head[v] = tot++; 36 } 37 38 void BFS(int root) 39 { 40 queue<int>q; 41 q.push(root); 42 vis[root] = 1; 43 ans[root] = node(vis[root], ++level[vis[root]]); 44 while(!q.empty()) 45 { 46 int u = q.front(); 47 q.pop(); 48 for(int i = head[u]; ~i; i = edge[i].nxt) 49 { 50 int v = edge[i].to; 51 if(!vis[v]) 52 { 53 vis[v] = vis[u] + 1; 54 ans[v] = node(vis[v], ++level[vis[v]]); 55 q.push(v); 56 } 57 } 58 } 59 } 60 61 int main() 62 { 63 while(~scanf("%d %d", &n, &m)) 64 { 65 Init(); 66 for(int i = 1, u, v; i <= m; ++i) 67 { 68 scanf("%d %d", &u, &v); 69 addedge(u, v); 70 } 71 BFS(1); 72 for(int i= 1 ; i <= n; ++i) 73 { 74 printf("%d %d\n", ans[i].x, ans[i].y); 75 } 76 } 77 return 0; 78 }