제출 #5368

#제출 시각아이디문제언어결과실행 시간메모리
5368baneling100비용 (KOI11_cost)C++98
10.80 / 24
1500 ms9496 KiB
#include <stdio.h> #include <algorithm> #include <vector> #include <queue> using namespace std; typedef pair <int,int> ppair; queue <int> q; pair <int,ppair> edge[100001]; vector <ppair> a[100001]; int n, m, check[100001], visit[100001]; long long ans; void input(void) { int i, x, y, w; scanf("%d %d",&n,&m); for(i=1 ; i<=m ; i++) { scanf("%d %d %d",&x,&y,&w); edge[i]=make_pair(w,make_pair(x,y)); } sort(edge+1,edge+m+1); for(i=1 ; i<=m ; i++) { a[edge[i].second.first].push_back(make_pair(edge[i].second.second,i)); a[edge[i].second.second].push_back(make_pair(edge[i].second.first,i)); } } int bfs(int start) { int i, j, now, cnt=0; for(i=1 ; i<=n ; i++) visit[i]=0; q.push(start); visit[start]=1; cnt++; while(!q.empty()) { now=q.front(); q.pop(); j=a[now].size(); for(i=0 ; i<j ; i++) if(visit[a[now][i].first]==0 && check[a[now][i].second]==0) { q.push(a[now][i].first); visit[a[now][i].first]=1; cnt++; } } return cnt; } void process(void) { int i, x, y, hab=0; for(i=1 ; i<=m ; i++) { hab+=edge[i].first; check[i]=1; x=bfs(edge[i].second.first); if(visit[edge[i].second.second]==0) { y=bfs(edge[i].second.second); ans+=(long long)x*y*hab; ans%=1000000000; } } } void output(void) { printf("%lld",ans); } int main(void) { input(); process(); output(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...