L2-002 链表去重
1 #include <bits/stdc++.h> 2 #define maxn 1000005 3 #define INF 0x3f3f3f3f 4 using namespace std; 5 struct node 6 { 7 int addres,num,nxt; 8 }lists[maxn]; 9 int vis[maxn]; 10 vector<node> ve1,ve2; 11 int main() 12 { 13 int sta,n; 14 cin>>sta>>n; 15 for(int i=0;i<n;i++) 16 { 17 int a,b,c; 18 cin>>a>>b>>c; 19 lists[a].addres=a,lists[a].num=b,lists[a].nxt=c; 20 } 21 int l,r; 22 l=sta,r=lists[sta].nxt; 23 int cnt1,cnt2; 24 cnt1=cnt2=0; 25 while(l!=-1) 26 { 27 r=lists[l].nxt; 28 int a=lists[l].num; 29 if(vis[abs(a)]) 30 { 31 ve2.push_back(lists[l]); 32 cnt2++; 33 ve1[cnt1-1].nxt=lists[l].nxt; 34 l=lists[l].nxt; 35 } 36 else 37 { 38 vis[abs(a)]=1; 39 ve1.push_back(lists[l]); 40 cnt1++; 41 l=lists[l].nxt; 42 43 } 44 } 45 for(auto it:ve1) 46 { 47 if(it.nxt!=-1) printf("%05d %d %05d\n",it.addres,it.num,it.nxt); 48 else printf("%05d %d %d\n",it.addres,it.num,it.nxt); 49 } 50 for(int i=0;i<cnt2-1;i++) 51 { 52 printf("%05d %d %05d\n",ve2[i].addres,ve2[i].num,ve2[i+1].addres); 53 } 54 printf("%05d %d %d",ve2[cnt2-1].addres,ve2[cnt2-1].num,-1); 55 return 0; 56 }
MILE NEVER GIVE UP!!!