Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //ANS : 259679
- #include <iostream>
- #include <cstdlib>
- #include <cstdio>
- #include <string>
- #include <cstring>
- using namespace std;
- int all_vertex_and_edge[40][40];
- unsigned long long set_name;
- void merg_sort_of_edges(int ara[][3],int len)
- {
- if(len==1)
- return ;
- int l,i;
- l=len/2;
- int ara1[l][3],ara2[len-l][3];
- for(i=0;i<l;i++){
- ara1[i][0]=ara[i][0];
- ara1[i][1]=ara[i][1];
- ara1[i][2]=ara[i][2];
- }
- for(;i<len;i++){
- ara2[i-l][0]=ara[i][0];
- ara2[i-l][1]=ara[i][1];
- ara2[i-l][2]=ara[i][2];
- }
- merg_sort_of_edges(ara1,l);
- merg_sort_of_edges(ara2,len-l);
- int j,k;
- j=k=0;
- for(i=0;i<len;i++){
- if(j<l && k<len-l){
- if(ara1[j][0]<ara2[k][0]){
- ara[i][0]=ara1[j][0];
- ara[i][1]=ara1[j][1];
- ara[i][2]=ara1[j][2];
- j++;
- }
- else{
- ara[i][0]=ara2[k][0];
- ara[i][1]=ara2[k][1];
- ara[i][2]=ara2[k][2];
- k++;
- }
- }
- else if(j<l){
- ara[i][0]=ara1[j][0];
- ara[i][1]=ara1[j][1];
- ara[i][2]=ara1[j][2];
- j++;
- }
- else{
- ara[i][0]=ara2[k][0];
- ara[i][1]=ara2[k][1];
- ara[i][2]=ara2[k][2];
- k++;
- }
- }
- return ;
- }
- int own_stoi(string s,int start=0,int base=10)
- {
- return strtol(s.substr(start).c_str(),0,base);
- }
- void process(char *str,int n)
- {
- string s=str;
- size_t x;
- int i=0,m=0;
- while(1){
- if(str[i]=='-')
- all_vertex_and_edge[n][m]=-1;
- else
- all_vertex_and_edge[n][m]=own_stoi(s,i);
- x=s.find(",",i);
- if(x==string::npos)
- break;
- else{
- i=x+1;
- m+=1;
- }
- }
- }
- void merg_set(int *ara,int x1,int x2)
- {
- if(x1<0 && x2<0){
- ara[x1]=ara[x2]=set_name++;
- return ;
- }
- if(x1<0){
- ara[x1]=ara[x2];
- return ;
- }
- if(x2<0){
- ara[x2]=ara[x1];
- return ;
- }
- int i,p;
- p=ara[x1];
- for(i=0;i<40;i++)
- if(ara[i]==p)
- ara[i]=ara[x2];
- return ;
- }
- int main(void)
- {
- FILE *fp;
- if((fp=fopen("network.txt","rb"))==NULL){
- printf("Cannot open file.\n");
- exit(1);
- }
- char str[1000];
- int i,j;
- for(i=0;i<40;i++){
- fgets(str,999,fp);
- process(str,i);
- }
- fclose(fp);
- set_name=0;
- unsigned long long total_maximum_cost=0,minimum=0;
- int x=0,edges[600][3];
- for(i=0;i<40;i++)
- for(j=i+1;j<40;j++)
- if(all_vertex_and_edge[i][j]!=-1){
- total_maximum_cost+=all_vertex_and_edge[i][j];
- edges[x][0]=all_vertex_and_edge[i][j];
- edges[x][1]=i;
- edges[x][2]=j;
- x++;
- }
- int p=0;
- merg_sort_of_edges(edges,x);
- int list_of_vertex[40];
- for(i=0;i<40;i++)
- list_of_vertex[i]=-(i+1);
- for(i=0;edges[i][0]!=-1 && p<39;i++){
- if(list_of_vertex[edges[i][1]]==list_of_vertex[edges[i][2]])
- continue;
- minimum+=edges[i][0];
- p++;
- merg_set(list_of_vertex,edges[i][1],edges[i][2]);
- }
- cout<<total_maximum_cost-minimum<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement