Submission #1001421


Source Code Expand

using System;
using System.Text;
using System.Collections.Generic;
class Solve{
    int N,Q;
    Edge[] e;
    public Solve(){}
    StringBuilder sb;
    public static int Main(){
        new Solve().Run();
        return 0;
    }
    void Run(){
        sb = new StringBuilder();
        Read();
        Calc();
        Console.Write(sb.ToString());
    }
    void Calc(){
        long[] circlecosts = new long[N];
        for(int i=0;i<N;i++){
            circlecosts[i] = -1;
        }
        for(int i=0;i<Q;i++){
            if(circlecosts[e[i].a] == -1 || e[i].cost+1 < circlecosts[e[i].a]){
                circlecosts[e[i].a] = e[i].cost + 1;
            }
            if(circlecosts[e[i].b] == -1 || e[i].cost+2 < circlecosts[e[i].b]){
                circlecosts[e[i].b] = e[i].cost + 2;
            }
        }
        for(int i=0;i<N;i++){
            if(i == 0){
                if(circlecosts[N-1] != -1 && (circlecosts[i] == -1 || circlecosts[i] > circlecosts[N-1] + 2)){
                    circlecosts[i] = circlecosts[N-1] + 2;
                }
            }
            else{
                if(circlecosts[i-1] != -1 && (circlecosts[i] == -1 || circlecosts[i] > circlecosts[i-1] + 2)){
                    circlecosts[i] = circlecosts[i-1] + 2;
                }
            }
        }
        for(int i=0;i<N;i++){
            if(i == 0){
                if(circlecosts[N-1] != -1 && (circlecosts[i] == -1 || circlecosts[i] > circlecosts[N-1] + 2)){
                    circlecosts[i] = circlecosts[N-1] + 2;
                }
            }
            else{
                if(circlecosts[i-1] != -1 && (circlecosts[i] == -1 || circlecosts[i] > circlecosts[i-1] + 2)){
                    circlecosts[i] = circlecosts[i-1] + 2;
                }
            }
        }
        for(int i=0;i<N;i++){
            if(i != N-1){
                e[i+Q] = new Edge(i,i+1,circlecosts[i]);
            }
            else{
                e[i+Q] = new Edge(i,0,circlecosts[i]);
            }
        }
        Kruskal K = new Kruskal(N,e);
        sb.Append(K.cost+"\n");
    }
    void Read(){
        string[] str = Console.ReadLine().Split(' ');
        N = int.Parse(str[0]);
        Q = int.Parse(str[1]);
        e = new Edge[Q+N];
        for(int i=0;i<Q;i++){
            str = Console.ReadLine().Split(' ');
            e[i] = new Edge(int.Parse(str[0]),int.Parse(str[1]),Int64.Parse(str[2]));
        }
    }    
}
class UnionFind{
    int[] par;
    public UnionFind(int n){
        par = new int[n];
        for(int i=0;i<n;i++){
            par[i] = i;
        }
    }
    public void Union(int x,int y){
        par[Get(x)] = y; 
    }
    public bool Same(int x,int y){
        return Get(x) == Get(y);
    }
    int Get(int x){
        if(x != par[x]){
            par[x] = Get(par[x]);
        }
        return par[x];
    }
}
class Edge{
    public int a;
    public int b;
    public long cost;
    public Edge(int a0,int b0,long c){
        a = a0;
        b = b0;
        cost = c;
    }
}
class Kruskal{
    int N,M;
    public Edge[] edges;
    public long cost;
    public Kruskal(int n,Edge[] e){
        N = n;
        edges = e;
        M = e.Length;
        Act();
    }
    public Kruskal(int n,int[] a,int[] b,long[] c){
        N = n;
        M = a.Length;
        edges = new Edge[M];
        for(int i=0;i<M;i++){
            edges[i] = new Edge(a[i],b[i],c[i]);
        }
        Act();
    }
    void Act(){
        UnionFind U = new UnionFind(N);
        cost = 0;
        Array.Sort(edges,(a,b) => a.cost > b.cost ? 1 : (a.cost == b.cost ? 0 : -1));
        for(int i=0;i<M;i++){
            if(!U.Same(edges[i].a,edges[i].b)){
                U.Union(edges[i].a,edges[i].b);
                cost += edges[i].cost;
            }
        }
    } 
}

Submission Info

Submission Time
Task G - Zigzag MST
User leign
Language C# (Mono 4.6.2.0)
Score 1300
Code Size 3939 Byte
Status AC
Exec Time 551 ms
Memory 28848 KB

Judge Result

Set Name sample all
Score / Max Score 0 / 0 1300 / 1300
Status
AC × 3
AC × 33
Set Name Test Cases
sample sample-01.txt, sample-02.txt, sample-03.txt
all sample-01.txt, sample-02.txt, sample-03.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt
Case Name Status Exec Time Memory
01-01.txt AC 22 ms 2776 KB
01-02.txt AC 351 ms 14808 KB
01-03.txt AC 523 ms 23344 KB
01-04.txt AC 132 ms 19544 KB
01-05.txt AC 111 ms 16984 KB
01-06.txt AC 127 ms 18008 KB
01-07.txt AC 126 ms 15448 KB
01-08.txt AC 131 ms 14808 KB
01-09.txt AC 160 ms 15184 KB
01-10.txt AC 342 ms 20864 KB
01-11.txt AC 464 ms 19896 KB
01-12.txt AC 542 ms 22700 KB
01-13.txt AC 545 ms 22704 KB
01-14.txt AC 545 ms 22700 KB
01-15.txt AC 548 ms 22704 KB
01-16.txt AC 536 ms 22704 KB
01-17.txt AC 551 ms 22704 KB
01-18.txt AC 442 ms 28204 KB
01-19.txt AC 125 ms 15576 KB
01-20.txt AC 160 ms 14168 KB
01-21.txt AC 264 ms 16560 KB
01-22.txt AC 522 ms 25024 KB
01-23.txt AC 513 ms 25024 KB
01-24.txt AC 126 ms 20432 KB
01-25.txt AC 513 ms 28848 KB
01-26.txt AC 143 ms 19544 KB
01-27.txt AC 152 ms 18256 KB
01-28.txt AC 370 ms 21744 KB
01-29.txt AC 467 ms 20792 KB
01-30.txt AC 547 ms 26032 KB
sample-01.txt AC 21 ms 2776 KB
sample-02.txt AC 21 ms 2776 KB
sample-03.txt AC 22 ms 2776 KB