結果
| 問題 |
No.748 yuki国のお財布事情
|
| コンテスト | |
| ユーザー |
akakimidori
|
| 提出日時 | 2018-10-22 14:59:47 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 53 ms / 2,000 ms |
| コード長 | 1,145 bytes |
| コンパイル時間 | 248 ms |
| コンパイル使用メモリ | 31,904 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-19 03:42:09 |
| 合計ジャッジ時間 | 2,023 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
コンパイルメッセージ
main.c: In function 'run':
main.c:46:3: warning: implicit declaration of function 'qsort_r'; did you mean 'qsort'? [-Wimplicit-function-declaration]
46 | qsort_r(p,m,sizeof(int),cmp,c);
| ^~~~~~~
| qsort
ソースコード
#include<stdio.h>
#include<stdlib.h>
typedef long long int int64;
int root(int *u,int x){
if(u[x]==x) return x;
return u[x]=root(u,u[x]);
}
int same(int *u,int x,int y){
return root(u,x)==root(u,y);
}
void unite(int *u,int x,int y){
x=root(u,x);
y=root(u,y);
if(x==y) return;
u[x]=y;
}
int cmp(const void *a,const void *b,void *d){
int *c=(int *)d;
return c[*(int *)a]-c[*(int *)b];
}
void run(void){
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
int *a=(int *)calloc(m,sizeof(int));
int *b=(int *)calloc(m,sizeof(int));
int *c=(int *)calloc(m,sizeof(int));
int i;
for(i=0;i<m;i++) scanf("%d%d%d",a+i,b+i,c+i);
int *u=(int *)calloc(n+1,sizeof(int));
for(i=0;i<=n;i++) u[i]=i;
for(i=0;i<k;i++){
int p;
scanf("%d",&p);
p--;
unite(u,a[p],b[p]);
c[p]=0;
}
int *p=(int *)calloc(m,sizeof(int));
for(i=0;i<m;i++) p[i]=i;
qsort_r(p,m,sizeof(int),cmp,c);
int64 sum=0;
for(i=0;i<m;i++){
int k=p[i];
if(c[k]==0) continue;
if(same(u,a[k],b[k])){
sum+=c[k];
} else {
unite(u,a[k],b[k]);
}
}
printf("%lld\n",sum);
}
int main(void){
run();
return 0;
}
akakimidori