using System; using System.Collections.Generic; using System.Collections; using System.Collections.Specialized; using System.Linq; using System.Text; using System.IO; using System.Reflection; using static System.Math; using System.Numerics; static class Program{ const int mod=(int)1e9+7; static List[] li,lir,lid; static bool[] b; static int k=0,m=0; static int[] h,zt; static void Main(){ Sc sc=new Sc(); var n=sc.I; li=new List[n+1]; lir=new List[n+1]; b=new bool[n+1]; k=n-1; for(int i=1;i<=n;i++){ li[i]=new List(); lir[i]=new List(); } var c=new int[n+1]; for(int i=1;i<=n;i++){ int[] e=sc.Ia; c[i]=e[0]; li[e[1]].Add(i); lir[i].Add(e[1]); } h=new int[n]; for(int i=1;i<=n;i++){if(!b[i]){Fu1(i);}} b=new bool[n+1]; zt=new int[n+1]; for(int i=0;i[m+1]; var d=new int[m+1]; for(int i=1;i<=m;i++){lid[i]=new List();} c[0]=int.MaxValue; for(int i=1;i<=n;i++){ for(int j=0;jc[i]){d[zt[i]]=i;} } for(int i = 1;i<=n;i++) { if(lid[zt[i]].Count!=0||d[zt[i]]!=i){ans+=c[i];} else{ans+=c[i]<<1;} } Console.WriteLine("{0:f1}",ans*1.0/2); } static void Fu1(int a){ b[a]=true; for(int i=0;i(int n,Func f){var a=new T[n];for(int i=0;i(int n,Func f){var a=new T[n];for(int i=0;i(int n,Func f){var a=new T[n];for(int i=0;i(int n,Func f){var a=new T[n];for(int i=0;i