首页 > 代码库 > 红黑树
红黑树
1、RBT
#include "stdafx.h"#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>#define maxn 1111111#define RED 0#define BLACK 1#define nil 0using namespace std;int n, m,id,value, root, tot, lefts[maxn], rights[maxn], fa[maxn], key[maxn], color[maxn], bh[maxn],size[maxn];void init(){ root = 0; lefts[nil] = rights[nil] = nil; fa[nil] = nil; //father of the node color[nil] = BLACK; size[nil] = 0; bh[nil] = 1;}void update(int x){ if (x == nil) return; size[x] = size[lefts[x]] + size[rights[x]] + 1;}void LR(int x){ int y = rights[x]; rights[x] = lefts[y]; if (lefts[y] != nil) fa[lefts[y]] = x; fa[y] = fa[x]; if (fa[x] == nil) root = y; //no one node points to y else if (x == lefts[fa[x]]) lefts[fa[x]] = y; else rights[fa[x]] = y; fa[x] = y; lefts[y] = x; update(x); update(y);}void RR(int x){ int y = lefts[x]; lefts[x] = rights[y]; if (rights[y] != nil) fa[rights[y]] = x; fa[y] = fa[x]; if (fa[x] == nil) root = y; //no one node points to y else if (x == lefts[fa[x]]) lefts[fa[x]] = y; else rights[fa[x]] = y; fa[x] = y; rights[y] = x; update(x); update(y);}void insertfixup(int z){ while (color[fa[z]] == RED) // fa[z] cannot be the root since color[root]=BLACK always; { if (fa[z] == lefts[fa[fa[z]]]) { int w = rights[fa[fa[z]]]; if (color[w] == RED) { color[fa[z]] = color[w] = BLACK; color[fa[fa[z]]] = RED; z = fa[fa[z]]; //color[z]=RED; only this case changes the value of z } else //color[w]==BLACK; { if (z == rights[fa[z]]) { z = fa[z]; LR(z); } //leftsrotate(z) so that z==lefts[fa[z]] color[fa[z]] = BLACK; color[fa[fa[z]]] = RED; RR(fa[fa[z]]); //once it is implementated it will break out of the while loop //so there are at most two rotatation LR & RR } } else //fa[z]==rights[fa[fa[z]]] { int w = lefts[fa[fa[z]]]; if (color[w] == RED) { color[fa[z]] = color[w] = BLACK; color[fa[fa[z]]] = RED; z = fa[fa[z]]; //color[z]=RED; } else //color[w]==BLACK { if (z == lefts[fa[z]]) { z = fa[z]; RR(z); } color[fa[z]] = BLACK; color[fa[fa[z]]] = RED; LR(fa[fa[z]]); } } } color[root] = BLACK; //maintain ROOT BLACK}void insert(int v){ int y = nil; int x = root; while (x != nil) { size[x]++; y = x; if (v < key[x]) x = lefts[x]; else x = rights[x]; } fa[++tot] = y; lefts[tot] = rights[tot] = nil;; key[tot] = v; size[tot] = 1; if (y == nil) root = tot; else if (v < key[y]) lefts[y] = tot; else rights[y] = tot; color[tot] = RED; //red insertfixup(tot);}int findmin(int x){ while (lefts[x] != nil) x = lefts[x]; return x;}int succ(int x){ if (rights[x] != nil) return findmin(rights[x]); int y = fa[x]; while (y != nil && x == rights[y]) { x = y; y = fa[y]; } return y;}void deletesfixup(int z){ while (z != root && color[z] == BLACK) //REDBLACK || BLACKBLACK EXIT { if (z == lefts[fa[z]]) { int w = rights[fa[z]]; if (color[w] == RED) { color[fa[z]] = RED; color[w] = BLACK; LR(fa[z]); //turns into case 2 w = rights[fa[z]]; } if (color[lefts[w]] == BLACK && color[rights[w]] == BLACK) { color[w] = RED; z = fa[z]; } else { if (color[rights[w]] == BLACK) //RED BLACK { color[lefts[w]] = BLACK; color[w] = RED; RR(w); //turns into case 4 w = rights[fa[z]]; } //RIGHT RED color[w] = color[fa[z]]; color[fa[z]] = BLACK; color[rights[w]] = BLACK; LR(fa[z]); z = root; } } else //z==rights[fa[z]] { int w = lefts[fa[z]]; if (color[w] == RED) { color[fa[z]] = RED; color[w] = BLACK; RR(fa[z]); //turns into case 2 w = lefts[fa[z]]; } if (color[lefts[w]] == BLACK && color[rights[w]] == BLACK) { color[z] = BLACK; color[w] = RED; z = fa[z]; } else { if (color[lefts[w]] == BLACK) //RED BLACK { color[rights[w]] = BLACK; color[w] = RED; LR(w); //turns into case 4 w = lefts[fa[z]]; } //LEFT RED color[w] = color[fa[z]]; color[fa[z]] = BLACK; color[lefts[w]] = BLACK; RR(fa[z]); z = root; } } } color[z] = BLACK;}void deletes(int z){ int y; if (lefts[z] == nil || rights[z] == nil) y = z; else y = succ(z); int x; if (lefts[y] != nil) x = lefts[y]; else x = rights[y]; fa[x] = fa[y]; if (fa[y] == nil) root = x; else if (y == lefts[fa[y]]) lefts[fa[y]] = x; else rights[fa[y]] = x; if (y != z) key[z] = key[y]; int p = fa[x]; while (p != nil) { size[p]--; p = fa[p]; } if (color[y] == BLACK) deletesfixup(x);}int getKth(int x, int now){ if (size[lefts[x]] >= now) return getKth(lefts[x], now); if (size[lefts[x]] + 1 == now) return x; return getKth(rights[x], now - size[lefts[x]] - 1);}int _tmain(int argc, _TCHAR* argv[]){ freopen("RBT.in", "r", stdin); freopen("RBT.out", "w", stdout); init(); scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &value); insert(value); } scanf("%d", &m); for (int i = 0; i < m; i++) { scanf("%d", &id); deletes(getKth(root,id)); } return 0;}
2、poj 1442
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>#define maxn 1111111#define RED 0#define BLACK 1#define nil 0using namespace std;int n, m,id,value, root, tot, lefts[maxn], rights[maxn], fa[maxn], key[maxn], color[maxn], size[maxn],p[maxn],rank[maxn],a[maxn],flag[maxn];void init(){ root = 0; lefts[nil] = rights[nil] = nil; fa[nil] = nil; //father of the node color[nil] = BLACK; size[nil] = 0;}void update(int x){ if (x == nil) return; size[x] = size[lefts[x]] + size[rights[x]] + 1;}void LR(int x){ int y = rights[x]; rights[x] = lefts[y]; if (lefts[y] != nil) fa[lefts[y]] = x; fa[y] = fa[x]; if (fa[x] == nil) root = y; //no one node points to y else if (x == lefts[fa[x]]) lefts[fa[x]] = y; else rights[fa[x]] = y; fa[x] = y; lefts[y] = x; update(x); update(y);}void RR(int x){ int y = lefts[x]; lefts[x] = rights[y]; if (rights[y] != nil) fa[rights[y]] = x; fa[y] = fa[x]; if (fa[x] == nil) root = y; //no one node points to y else if (x == lefts[fa[x]]) lefts[fa[x]] = y; else rights[fa[x]] = y; fa[x] = y; rights[y] = x; update(x); update(y);}void insertfixup(int z){ while (color[fa[z]] == RED) // fa[z] cannot be the root since color[root]=BLACK always; { if (fa[z] == lefts[fa[fa[z]]]) { int w = rights[fa[fa[z]]]; if (color[w] == RED) { color[fa[z]] = color[w] = BLACK; color[fa[fa[z]]] = RED; z = fa[fa[z]]; //color[z]=RED; only this case changes the value of z } else //color[w]==BLACK; { if (z == rights[fa[z]]) { z = fa[z]; LR(z); } //leftsrotate(z) so that z==lefts[fa[z]] color[fa[z]] = BLACK; color[fa[fa[z]]] = RED; RR(fa[fa[z]]); //once it is implementated it will break out of the while loop //so there are at most two rotatation LR & RR } } else //fa[z]==rights[fa[fa[z]]] { int w = lefts[fa[fa[z]]]; if (color[w] == RED) { color[fa[z]] = color[w] = BLACK; color[fa[fa[z]]] = RED; z = fa[fa[z]]; //color[z]=RED; } else //color[w]==BLACK { if (z == lefts[fa[z]]) { z = fa[z]; RR(z); } color[fa[z]] = BLACK; color[fa[fa[z]]] = RED; LR(fa[fa[z]]); } } } color[root] = BLACK; //maintain ROOT BLACK}void insert(int v){ int y = nil; int x = root; while (x != nil) { size[x]++; y = x; if (v < key[x]) x = lefts[x]; else x = rights[x]; } fa[++tot] = y; lefts[tot] = rights[tot] = nil;; key[tot] = v; size[tot] = 1; if (y == nil) root = tot; else if (v < key[y]) lefts[y] = tot; else rights[y] = tot; color[tot] = RED; //red insertfixup(tot);}int findmin(int x){ while (lefts[x] != nil) x = lefts[x]; return x;}int succ(int x){ if (rights[x] != nil) return findmin(rights[x]); int y = fa[x]; while (y != nil && x == rights[y]) { x = y; y = fa[y]; } return y;}void deletesfixup(int z){ while (z != root && color[z] == BLACK) //REDBLACK || BLACKBLACK EXIT { if (z == lefts[fa[z]]) { int w = rights[fa[z]]; if (color[w] == RED) { color[fa[z]] = RED; color[w] = BLACK; LR(fa[z]); //turns into case 2 w = rights[fa[z]]; } if (color[lefts[w]] == BLACK && color[rights[w]] == BLACK) { color[w] = RED; z = fa[z]; } else { if (color[rights[w]] == BLACK) //RED BLACK { color[lefts[w]] = BLACK; color[w] = RED; RR(w); //turns into case 4 w = rights[fa[z]]; } //RIGHT RED color[w] = color[fa[z]]; color[fa[z]] = BLACK; color[rights[w]] = BLACK; LR(fa[z]); z = root; } } else //z==rights[fa[z]] { int w = lefts[fa[z]]; if (color[w] == RED) { color[fa[z]] = RED; color[w] = BLACK; RR(fa[z]); //turns into case 2 w = lefts[fa[z]]; } if (color[lefts[w]] == BLACK && color[rights[w]] == BLACK) { color[z] = BLACK; color[w] = RED; z = fa[z]; } else { if (color[lefts[w]] == BLACK) //RED BLACK { color[rights[w]] = BLACK; color[w] = RED; LR(w); //turns into case 4 w = lefts[fa[z]]; } //LEFT RED color[w] = color[fa[z]]; color[fa[z]] = BLACK; color[lefts[w]] = BLACK; RR(fa[z]); z = root; } } } color[z] = BLACK;}void deletes(int z){ int y; if (lefts[z] == nil || rights[z] == nil) y = z; else y = succ(z); int x; if (lefts[y] != nil) x = lefts[y]; else x = rights[y]; fa[x] = fa[y]; if (fa[y] == nil) root = x; else if (y == lefts[fa[y]]) lefts[fa[y]] = x; else rights[fa[y]] = x; if (y != z) key[z] = key[y]; int p = fa[x]; while (p != nil) { size[p]--; p = fa[p]; } if (color[y] == BLACK) deletesfixup(x);}int getKth(int x, int now){ if (size[lefts[x]] >= now) return getKth(lefts[x], now); if (size[lefts[x]] + 1 == now) return key[x]; return getKth(rights[x], now - size[lefts[x]] - 1);}int getnode(int v){ int x=root; while (key[x]!=v) { if (v<key[x]) x=lefts[x]; else x=rights[x]; } return x;}int main(){ init(); scanf("%d %d", &n,&m); for (int i = 1; i <=n; i++) { scanf("%d",&a[i]); } for (int i=1;i<=m;i++) { int v; scanf("%d",&v); flag[v]++; } int now=0; for (int i=1;i<=n;i++) { insert(a[i]); for (int j=1;j<=flag[i];j++) { now++; printf("%d\n",getKth(root,now)); } } return 0;}
3、poj2985
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>#define maxn 1111111#define RED 0#define BLACK 1#define nil 0using namespace std;int n, m,id,value, root, tot, lefts[maxn], rights[maxn], fa[maxn], key[maxn], color[maxn], size[maxn],p[maxn],rank[maxn];void init(){ root = 0; lefts[nil] = rights[nil] = nil; fa[nil] = nil; //father of the node color[nil] = BLACK; size[nil] = 0;}void update(int x){ if (x == nil) return; size[x] = size[lefts[x]] + size[rights[x]] + 1;}void LR(int x){ int y = rights[x]; rights[x] = lefts[y]; if (lefts[y] != nil) fa[lefts[y]] = x; fa[y] = fa[x]; if (fa[x] == nil) root = y; //no one node points to y else if (x == lefts[fa[x]]) lefts[fa[x]] = y; else rights[fa[x]] = y; fa[x] = y; lefts[y] = x; update(x); update(y);}void RR(int x){ int y = lefts[x]; lefts[x] = rights[y]; if (rights[y] != nil) fa[rights[y]] = x; fa[y] = fa[x]; if (fa[x] == nil) root = y; //no one node points to y else if (x == lefts[fa[x]]) lefts[fa[x]] = y; else rights[fa[x]] = y; fa[x] = y; rights[y] = x; update(x); update(y);}void insertfixup(int z){ while (color[fa[z]] == RED) // fa[z] cannot be the root since color[root]=BLACK always; { if (fa[z] == lefts[fa[fa[z]]]) { int w = rights[fa[fa[z]]]; if (color[w] == RED) { color[fa[z]] = color[w] = BLACK; color[fa[fa[z]]] = RED; z = fa[fa[z]]; //color[z]=RED; only this case changes the value of z } else //color[w]==BLACK; { if (z == rights[fa[z]]) { z = fa[z]; LR(z); } //leftsrotate(z) so that z==lefts[fa[z]] color[fa[z]] = BLACK; color[fa[fa[z]]] = RED; RR(fa[fa[z]]); //once it is implementated it will break out of the while loop //so there are at most two rotatation LR & RR } } else //fa[z]==rights[fa[fa[z]]] { int w = lefts[fa[fa[z]]]; if (color[w] == RED) { color[fa[z]] = color[w] = BLACK; color[fa[fa[z]]] = RED; z = fa[fa[z]]; //color[z]=RED; } else //color[w]==BLACK { if (z == lefts[fa[z]]) { z = fa[z]; RR(z); } color[fa[z]] = BLACK; color[fa[fa[z]]] = RED; LR(fa[fa[z]]); } } } color[root] = BLACK; //maintain ROOT BLACK}void insert(int v){ int y = nil; int x = root; while (x != nil) { size[x]++; y = x; if (v < key[x]) x = lefts[x]; else x = rights[x]; } fa[++tot] = y; lefts[tot] = rights[tot] = nil;; key[tot] = v; size[tot] = 1; if (y == nil) root = tot; else if (v < key[y]) lefts[y] = tot; else rights[y] = tot; color[tot] = RED; //red insertfixup(tot);}int findmin(int x){ while (lefts[x] != nil) x = lefts[x]; return x;}int succ(int x){ if (rights[x] != nil) return findmin(rights[x]); int y = fa[x]; while (y != nil && x == rights[y]) { x = y; y = fa[y]; } return y;}void deletesfixup(int z){ while (z != root && color[z] == BLACK) //REDBLACK || BLACKBLACK EXIT { if (z == lefts[fa[z]]) { int w = rights[fa[z]]; if (color[w] == RED) { color[fa[z]] = RED; color[w] = BLACK; LR(fa[z]); //turns into case 2 w = rights[fa[z]]; } if (color[lefts[w]] == BLACK && color[rights[w]] == BLACK) { color[w] = RED; z = fa[z]; } else { if (color[rights[w]] == BLACK) //RED BLACK { color[lefts[w]] = BLACK; color[w] = RED; RR(w); //turns into case 4 w = rights[fa[z]]; } //RIGHT RED color[w] = color[fa[z]]; color[fa[z]] = BLACK; color[rights[w]] = BLACK; LR(fa[z]); z = root; } } else //z==rights[fa[z]] { int w = lefts[fa[z]]; if (color[w] == RED) { color[fa[z]] = RED; color[w] = BLACK; RR(fa[z]); //turns into case 2 w = lefts[fa[z]]; } if (color[lefts[w]] == BLACK && color[rights[w]] == BLACK) { color[z] = BLACK; color[w] = RED; z = fa[z]; } else { if (color[lefts[w]] == BLACK) //RED BLACK { color[rights[w]] = BLACK; color[w] = RED; LR(w); //turns into case 4 w = lefts[fa[z]]; } //LEFT RED color[w] = color[fa[z]]; color[fa[z]] = BLACK; color[lefts[w]] = BLACK; RR(fa[z]); z = root; } } } color[z] = BLACK;}void deletes(int z){ int y; if (lefts[z] == nil || rights[z] == nil) y = z; else y = succ(z); int x; if (lefts[y] != nil) x = lefts[y]; else x = rights[y]; fa[x] = fa[y]; if (fa[y] == nil) root = x; else if (y == lefts[fa[y]]) lefts[fa[y]] = x; else rights[fa[y]] = x; if (y != z) key[z] = key[y]; int p = fa[x]; while (p != nil) { size[p]--; p = fa[p]; } if (color[y] == BLACK) deletesfixup(x);}int getKth(int x, int now){ if (size[rights[x]] >= now) return getKth(rights[x], now); if (size[rights[x]] + 1 == now) return key[x]; return getKth(lefts[x], now - size[rights[x]] - 1);}int getnode(int v){ int x=root; while (key[x]!=v) { if (v<key[x]) x=lefts[x]; else x=rights[x]; } return x;}int getp(int x){ if (p[x]!=x) p[x]=getp(p[x]); return p[x];}int main(){ init(); scanf("%d %d", &n,&m); for (int i = 1; i <=n; i++) { insert(1); p[i]=i; rank[i]=1; } for (int i = 0; i < m; i++) { int t,x,y; scanf("%d",&t); if (t==0) { scanf("%d %d",&x,&y); int t1=getp(x); int t2=getp(y); if (t1!=t2) { p[t2]=t1; deletes(getnode(rank[t1])); deletes(getnode(rank[t2])); rank[t1]+=rank[t2]; insert(rank[t1]); } } else { int k; scanf("%d",&k); printf("%d\n",getKth(root,k)); } } return 0;}
4、poj3481
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>#define maxn 1111111#define RED 0#define BLACK 1#define nil 0using namespace std;int n, m,id,value, root, tot, lefts[maxn], rights[maxn], fa[maxn], key[maxn], color[maxn], size[maxn],p[maxn],rank[maxn],a[maxn];void init(){ root = 0; lefts[nil] = rights[nil] = nil; fa[nil] = nil; //father of the node color[nil] = BLACK; size[nil] = 0;}void update(int x){ if (x == nil) return; size[x] = size[lefts[x]] + size[rights[x]] + 1;}void LR(int x){ int y = rights[x]; rights[x] = lefts[y]; if (lefts[y] != nil) fa[lefts[y]] = x; fa[y] = fa[x]; if (fa[x] == nil) root = y; //no one node points to y else if (x == lefts[fa[x]]) lefts[fa[x]] = y; else rights[fa[x]] = y; fa[x] = y; lefts[y] = x; update(x); update(y);}void RR(int x){ int y = lefts[x]; lefts[x] = rights[y]; if (rights[y] != nil) fa[rights[y]] = x; fa[y] = fa[x]; if (fa[x] == nil) root = y; //no one node points to y else if (x == lefts[fa[x]]) lefts[fa[x]] = y; else rights[fa[x]] = y; fa[x] = y; rights[y] = x; update(x); update(y);}void insertfixup(int z){ while (color[fa[z]] == RED) // fa[z] cannot be the root since color[root]=BLACK always; { if (fa[z] == lefts[fa[fa[z]]]) { int w = rights[fa[fa[z]]]; if (color[w] == RED) { color[fa[z]] = color[w] = BLACK; color[fa[fa[z]]] = RED; z = fa[fa[z]]; //color[z]=RED; only this case changes the value of z } else //color[w]==BLACK; { if (z == rights[fa[z]]) { z = fa[z]; LR(z); } //leftsrotate(z) so that z==lefts[fa[z]] color[fa[z]] = BLACK; color[fa[fa[z]]] = RED; RR(fa[fa[z]]); //once it is implementated it will break out of the while loop //so there are at most two rotatation LR & RR } } else //fa[z]==rights[fa[fa[z]]] { int w = lefts[fa[fa[z]]]; if (color[w] == RED) { color[fa[z]] = color[w] = BLACK; color[fa[fa[z]]] = RED; z = fa[fa[z]]; //color[z]=RED; } else //color[w]==BLACK { if (z == lefts[fa[z]]) { z = fa[z]; RR(z); } color[fa[z]] = BLACK; color[fa[fa[z]]] = RED; LR(fa[fa[z]]); } } } color[root] = BLACK; //maintain ROOT BLACK}void insert(int add,int v){ int y = nil; int x = root; while (x != nil) { size[x]++; y = x; if (v < key[x]) x = lefts[x]; else x = rights[x]; } fa[++tot] = y; lefts[tot] = rights[tot] = nil;; key[tot] = v; size[tot] = 1; a[tot]=add; if (y == nil) root = tot; else if (v < key[y]) lefts[y] = tot; else rights[y] = tot; color[tot] = RED; //red insertfixup(tot);}int findmin(int x){ while (lefts[x] != nil) x = lefts[x]; return x;}int succ(int x){ if (rights[x] != nil) return findmin(rights[x]); int y = fa[x]; while (y != nil && x == rights[y]) { x = y; y = fa[y]; } return y;}void deletesfixup(int z){ while (z != root && color[z] == BLACK) //REDBLACK || BLACKBLACK EXIT { if (z == lefts[fa[z]]) { int w = rights[fa[z]]; if (color[w] == RED) { color[fa[z]] = RED; color[w] = BLACK; LR(fa[z]); //turns into case 2 w = rights[fa[z]]; } if (color[lefts[w]] == BLACK && color[rights[w]] == BLACK) { color[w] = RED; z = fa[z]; } else { if (color[rights[w]] == BLACK) //RED BLACK { color[lefts[w]] = BLACK; color[w] = RED; RR(w); //turns into case 4 w = rights[fa[z]]; } //RIGHT RED color[w] = color[fa[z]]; color[fa[z]] = BLACK; color[rights[w]] = BLACK; LR(fa[z]); z = root; } } else //z==rights[fa[z]] { int w = lefts[fa[z]]; if (color[w] == RED) { color[fa[z]] = RED; color[w] = BLACK; RR(fa[z]); //turns into case 2 w = lefts[fa[z]]; } if (color[lefts[w]] == BLACK && color[rights[w]] == BLACK) { color[z] = BLACK; color[w] = RED; z = fa[z]; } else { if (color[lefts[w]] == BLACK) //RED BLACK { color[rights[w]] = BLACK; color[w] = RED; LR(w); //turns into case 4 w = lefts[fa[z]]; } //LEFT RED color[w] = color[fa[z]]; color[fa[z]] = BLACK; color[lefts[w]] = BLACK; RR(fa[z]); z = root; } } } color[z] = BLACK;}void deletes(int z){ int y; if (lefts[z] == nil || rights[z] == nil) y = z; else y = succ(z); int x; if (lefts[y] != nil) x = lefts[y]; else x = rights[y]; fa[x] = fa[y]; if (fa[y] == nil) root = x; else if (y == lefts[fa[y]]) lefts[fa[y]] = x; else rights[fa[y]] = x; if (y != z) { key[z] = key[y]; a[z] = a[y]; } int p = fa[x]; while (p != nil) { size[p]--; p = fa[p]; } if (color[y] == BLACK) deletesfixup(x);}int getmax(int x){ if (rights[x]==nil) return x; return getmax(rights[x]);}int getmin(int x){ if (lefts[x]==nil) return x; return getmin(lefts[x]);}int main(){ init(); int t,k,v; scanf("%d", &t); while (t) { if (t==1) { scanf("%d %d",&k,&v); insert(k,v); } else if (t==2) { int ans=getmax(root); printf("%d\n",a[ans]); deletes(ans); } else { int ans=getmin(root); printf("%d\n",a[ans]); deletes(ans); } scanf("%d",&t); } return 0;}
红黑树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。