#include<bits/stdc++.h>#define int long long#define PII pair<int,int>usingnamespacestd;/*!@#$%^&*!@#$%^&*~~优美的分界线~~*&^%$#@!*&^%$#@!*/constintN=4e6+5;intn;intcnt;intc[N];intf[N][2];intfa[N];PIIl[N];inttot,head[N],nxt[N<<1],ver[N<<1];/*!@#$%^&*!@#$%^&*~~优美的分界线~~*&^%$#@!*&^%$#@!*/voidadd(inta,intb){ver[++tot]=b;nxt[tot]=head[a],head[a]=tot;}intfind(intx){if(x==fa[x])returnx;returnfa[x]=find(fa[x]);}voiddfs(intx,intfa,intt){//表示 to 这个点的骑士不能参见骑士团f[x][0]=0;if(x==t)f[x][1]=-0x3f3f3f3f;elsef[x][1]=c[x];for(inti=head[x];i;i=nxt[i]){inty=ver[i];if(y==fa)continue;dfs(y,x,t);f[x][0]+=max(f[y][0],f[y][1]);if(x!=t)f[x][1]+=f[y][0];}}/*!@#$%^&*!@#$%^&*~~优美的分界线~~*&^%$#@!*&^%$#@!*/signedmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n;for(inti=1;i<=n;i++)fa[i]=i;for(inti=1;i<=n;i++){inta,b;cin>>a>>b;c[i]=a;intxa=find(i),xb=find(b);if(xa==xb)l[++cnt]=make_pair(i,b);elseadd(i,b),add(b,i);fa[xa]=xb;}intANS=0;for(inti=1;i<=cnt;i++){intans=0;dfs(l[i].first,-1,-1);ans=f[l[i].first][0];dfs(l[i].first,-1,l[i].second);ans=max(ans,max(f[l[i].first][0],f[l[i].first][1]));ANS+=ans;}cout<<ANS;return0;}