Submission #1694580
Source Code Expand
//dfs树的灵活运用
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define N 2010
#define inf 2147483647
using namespace std;
struct edge{int x, y, next;}a[4010010];
int n, w[N], l, p[N], flag[N], fa[N], S, mnp, b[N], du[N], ans[N];
vector<int>son[N], son1[N];
inline int gcd(int a, int b){return b?gcd(b, a%b):a;}
inline void add(int x, int y){a[++l].x=x; a[l].y=y; a[l].next=p[x]; p[x]=l;}
inline void dfs(int x){
flag[x]=1; son1[x].clear();
for(int i=p[x]; i; i=a[i].next)if(!flag[a[i].y])son1[x].push_back(a[i].y);
int mnp; w[0]=inf;
while(1){
mnp=0;
for(int i=0; i<son1[x].size(); i++)if(!flag[son1[x][i]]&&w[mnp]>w[son1[x][i]])mnp=son1[x][i];
if(!mnp)break;
fa[mnp]=x; dfs(mnp);
}
}
inline void solve(){
l=0; memset(p, 0, sizeof(p)); memset(du, 0, sizeof(du));
for(int i=1; i<=n; i++)
for(int j=i+1; j<=n; j++)if(gcd(b[i], b[j])!=1){add(i, j); du[j]++;}
memset(flag, 0, sizeof(flag));
for(int i=1; i<=n; i++)if(!du[i])flag[i]=1;
int mnp; b[0]=-inf;
for(int i=1; i<=n; i++){
mnp=0;
for(int j=1; j<=n; j++)if(flag[j]&&b[mnp]<b[j])mnp=j;
ans[i]=b[mnp]; flag[mnp]=0;
for(int j=p[mnp]; j; j=a[j].next){du[a[j].y]--; if(!du[a[j].y])flag[a[j].y]=1;}
}
}
int main(){
scanf("%d", &n);
for(int i=1; i<=n; i++)scanf("%d", &w[i]);
S=n+1; w[n+1]=0;
l=0; memset(p, 0, sizeof(p));
for(int i=1; i<=n; i++)
for(int j=i+1; j<=n; j++)if(gcd(w[i], w[j])!=1){add(i, j); add(j, i);}
for(int i=1; i<=n; i++){add(S, i); add(i, S);}
memset(flag, 0, sizeof(flag));
fa[S]=0; dfs(S);
for(int i=1; i<=S; i++)son[i].clear();
for(int i=1; i<=n; i++)son[fa[i]].push_back(i);
memset(flag, 0, sizeof(flag)); flag[S]=1; l=-1;
for(int i=1; i<=S; i++){
mnp=0; w[0]=inf;
for(int j=1; j<=S; j++)if(flag[j]&&w[mnp]>w[j])mnp=j;
b[++l]=w[mnp]; flag[mnp]=0;
for(int j=0; j<son[mnp].size(); j++)flag[son[mnp][j]]=1;
}
solve();
for(int i=1; i<=n-1; i++)printf("%d ", ans[i]); printf("%d", ans[n]);
return 0;
}
Submission Info
Submission Time |
|
Task |
E - Rearranging |
User |
leoly |
Language |
C++14 (GCC 5.4.1) |
Score |
1600 |
Code Size |
2025 Byte |
Status |
AC |
Exec Time |
614 ms |
Memory |
38272 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:45:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &n);
^
./Main.cpp:46:43: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for(int i=1; i<=n; i++)scanf("%d", &w[i]);
^
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
1600 / 1600 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample1.txt, sample2.txt |
All |
sample1.txt, sample2.txt, in1.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in2.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in3.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in4.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in5.txt, in6.txt, in7.txt, in8.txt, in9.txt, sample1.txt, sample2.txt |
Case Name |
Status |
Exec Time |
Memory |
in1.txt |
AC |
552 ms |
23168 KB |
in10.txt |
AC |
592 ms |
25344 KB |
in11.txt |
AC |
440 ms |
4992 KB |
in12.txt |
AC |
443 ms |
4992 KB |
in13.txt |
AC |
439 ms |
4992 KB |
in14.txt |
AC |
442 ms |
4992 KB |
in15.txt |
AC |
442 ms |
4992 KB |
in16.txt |
AC |
595 ms |
38272 KB |
in17.txt |
AC |
614 ms |
38272 KB |
in18.txt |
AC |
606 ms |
38272 KB |
in19.txt |
AC |
559 ms |
38272 KB |
in2.txt |
AC |
582 ms |
23168 KB |
in20.txt |
AC |
583 ms |
38272 KB |
in21.txt |
AC |
351 ms |
512 KB |
in22.txt |
AC |
352 ms |
512 KB |
in23.txt |
AC |
353 ms |
512 KB |
in24.txt |
AC |
351 ms |
640 KB |
in25.txt |
AC |
352 ms |
512 KB |
in26.txt |
AC |
441 ms |
4992 KB |
in27.txt |
AC |
442 ms |
4992 KB |
in28.txt |
AC |
439 ms |
4992 KB |
in29.txt |
AC |
443 ms |
4992 KB |
in3.txt |
AC |
559 ms |
23040 KB |
in30.txt |
AC |
441 ms |
4992 KB |
in31.txt |
AC |
1 ms |
384 KB |
in32.txt |
AC |
1 ms |
384 KB |
in33.txt |
AC |
1 ms |
384 KB |
in34.txt |
AC |
405 ms |
512 KB |
in35.txt |
AC |
404 ms |
512 KB |
in36.txt |
AC |
469 ms |
7680 KB |
in37.txt |
AC |
472 ms |
7680 KB |
in38.txt |
AC |
473 ms |
7808 KB |
in39.txt |
AC |
473 ms |
7808 KB |
in4.txt |
AC |
597 ms |
23040 KB |
in40.txt |
AC |
474 ms |
7680 KB |
in41.txt |
AC |
478 ms |
7680 KB |
in42.txt |
AC |
474 ms |
7680 KB |
in43.txt |
AC |
470 ms |
7680 KB |
in44.txt |
AC |
469 ms |
7680 KB |
in45.txt |
AC |
467 ms |
7808 KB |
in5.txt |
AC |
563 ms |
23040 KB |
in6.txt |
AC |
565 ms |
25216 KB |
in7.txt |
AC |
562 ms |
25344 KB |
in8.txt |
AC |
563 ms |
25344 KB |
in9.txt |
AC |
559 ms |
23168 KB |
sample1.txt |
AC |
1 ms |
384 KB |
sample2.txt |
AC |
1 ms |
384 KB |