注:本题解为个人题解,不保证完全正确(反正样例过了)
其中:个别题目我认为存在多测(和样例有出入);一个题目题干描述不清,我猜测后处理
/*
先放个能带来幸运的小猫:
⣿⣿⣿⠟⠛⠛⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢋⣩⣉⢻
⣿⣿⣿⠀⣿⣶⣕⣈⠹⠿⠿⠿⠿⠟⠛⣛⢋⣰⠣⣿⣿⠀⣿
⣿⣿⣿⡀⣿⣿⣿⣧⢻⣿⣶⣷⣿⣿⣿⣿⣿⣿⠿⠶⡝⠀⣿
⣿⣿⣿⣷⠘⣿⣿⣿⢏⣿⣿⣋⣀⣈⣻⣿⣿⣷⣤⣤⣿⡐⢿
⣿⣿⣿⣿⣆⢩⣝⣫⣾⣿⣿⣿⣿⡟⠿⠿⠦⠀⠸⠿⣻⣿⡄⢻
⣿⣿⣿⣿⣿⡄⢻⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣾⣿⣿⣿⣿⠇⣼
⣿⣿⣿⣿⣿⣿⡄⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⣰
⣿⣿⣿⣿⣿⣿⠇⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢀⣿
⣿⣿⣿⣿⣿⠏⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢸⣿
⣿⣿⣿⣿⠟⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿
⣿⣿⣿⠋⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⣿
⣿⣿⠋⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸
小猫保佑永远没有BUG!!!
*/
Q1:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
stack<char> st;
char e;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
while(cin>>e){
cout<<e<<" ";
st.push(e);
}
cout<<endl;
while(!st.empty()){
cout<<st.top()<<" ";
st.pop();
}
return 0;
}
Q2:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 1005, MAX = 1e9, INF = -1e9;
int x;
int n,m;
string a,b,c;
vector<int> ans;
queue<int> q;
map<int,vector<int>> v;
map<PII,string> e;
map<PII,int> num;
map<int,string> mp;
map<string,int> rmp;
int g1[N][N];
int g2[N][N];
int d[N];
int ev[N];
int lv[N];
map<int,vector<int>> rv;
void topsort(){
for(int i =1;i<=n;i++){
if(d[i]==0)q.push(i),ans.pb(i);
}
while(!q.empty()){
int t=q.front();
q.pop();
for(auto i:v[t]){
d[i]--;
if(d[i]==0){
q.push(i);
ans.pb(i);
}
}
}
for(auto i:ans){
cout<<mp[i]<<" ";
}
cout<<endl;
ans.clear();
memset(d,0,sizeof d);
return ;
}
void key(){
memset(ev,0,sizeof ev);
memset(lv,0x3f,sizeof lv);
ev[1]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
ev[j]=max(ev[j],ev[i]+g1[i][j]);
}
}
lv[n]=ev[n];
for(int i=n;i>=1;i--){
for(int j=n;j>=1;j--){
lv[j]=min(lv[j],lv[i]-g1[j][i]);
}
}
int l=0;
for(int i=1;i<=n;i++){
if(ev[i]==lv[i]&&l==0){
l=i;
}
else if(ev[i]==lv[i]&&l!=0){
cout<<mp[l]<<" "<<mp[i]<<endl;
l=i;
}
}
map<string,int> a;
map<string,int> b;
for(auto i:e){
a[i.second]=ev[i.first.first];
b[i.second]=lv[i.first.second]-num[i.first];
}
for(auto i:e){
cout<<i.second<<" "<<a[i.second]<<" "<<b[i.second]<<endl;
}
int ls=0;
l=0;
for(int i=1;i<=n;i++){
if(ev[i]==lv[i]&&l==0){
l=i;
}
else if(ev[i]==lv[i]&&l!=0){
ls+=num[{l,i}];
l=i;
}
}
cout<<ls<<endl;
l=0;
for(int i=1;i<=n;i++){
if(ev[i]==lv[i]&&l==0){
l=i;
}
else if(ev[i]==lv[i]&&l!=0){
cout<<e[{l,i}]<<" ";
l=i;
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
g2[i][j]=MAX;
g1[i][j]=INF;
}
}
memset(d,0,sizeof d);
for(int i=1;i<=n;i++){
cin>>a;
mp[i]=a;
rmp[a]=i;
}
for(int i=1;i<=m;i++){
cin>>a>>b>>c>>x;
rv[rmp[b]].pb(rmp[a]);
v[rmp[a]].pb(rmp[b]);
e[{rmp[a],rmp[b]}]=c;
num[{rmp[a],rmp[b]}]=x;
g1[rmp[a]][rmp[b]]=x;
g2[rmp[a]][rmp[b]]=x;
d[rmp[b]]++;
}
topsort();
key();
return 0;
}
Q3:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
vector<int> v;
int a,b,c;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
while(cin>>a){
if(a==1){
cin>>b>>c;
v.insert(v.begin()+b-1,1,c);
}
else if(a==2){
cin>>b;
v.erase(v.begin()+b-1);
}
else{
for(auto i:v){
cout<<i<<" ";
}
cout<<endl;
}
}
return 0;
}
Q4:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
vector<int> v;
int e;int x;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
while(cin>>e){
v.pb(e);
}
x=e;
v.pop_back();
for(auto i:v){
cout<<i<<" ";
}
cout<<endl;
for(auto i:v){
if(i>=x)cout<<i<<" ";
}
return 0;
}
Q5:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
string a;
string b;
map<int,int> mp1;
map<int,int> mp2;
map<int,int> ans;
void pre_deal(){
bool key=false;
bool fg=false;
int k;
for(int i=0;i<a.size();i++){
if(a[i]=='-'){
fg=true;
}
else if(key==false&&a[i]>='0'&&a[i]<='9'){
k=a[i]-'0';
if(fg){
k=-k;fg=false;
}
key=true;
}
else if(key==true&&a[i]>='0'&&a[i]<='9'){
int e=a[i]-'0';
if(fg){
e=-e;
fg=false;
}
key=false;
mp1[e]=k;
}
}
key=false;
fg=false;
for(int i=0;i<b.size();i++){
if(b[i]=='-'){
fg=true;
}
else if(key==false&&b[i]>='0'&&b[i]<='9'){
k=b[i]-'0';
if(fg){
k=-k;fg=false;
}
key=true;
}
else if(key==true&&b[i]>='0'&&b[i]<='9'){
int e=b[i]-'0';
if(fg){
e=-e;
fg=false;
}
key=false;
mp2[e]=k;
}
}
}
void solve(){
pre_deal();
for(auto i:mp1){
ans[i.first]+=i.second;
}
for(auto i:mp2){
ans[i.first]+=i.second;
}
stack<int> v;
for(auto i:ans){
if(i.second!=0){
v.push(i.first);
v.push(i.second);
}
}
while(!v.empty()){
cout<<v.top()<<" ";
v.pop();
}
mp1.clear();mp2.clear();ans.clear();
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
while(getline(cin,a)&&getline(cin,b)){
solve();
cout<<endl;
}
return 0;
}
Q6:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
vector<char> v;
char e;
int n=0;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
while(cin>>e){
v.pb(e);
n++;
}
for(auto i:v){
cout<<i<<" ";
}
cout<<endl;
int l=0;int r=n-1;
while(l<=r){
if(v[l]!=v[r]){
cout<<"F"<<endl;
return 0;
}
l++;r--;
}
cout<<"T"<<endl;
return 0;
}
Q7:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
int n;
int a,b,c;
map<int,int> lc;
map<int,int> rc;
bool st[N];
int root;
void dfs1(int x){
cout<<x<<" ";
if(lc.find(x)!=lc.end())dfs1(lc[x]);
if(rc.find(x)!=rc.end())dfs1(rc[x]);
if(lc.find(x)==lc.end()&&rc.find(x)==rc.end())return ;
}
void dfs2(int x){
if(lc.find(x)!=lc.end())dfs2(lc[x]);
cout<<x<<" ";
if(rc.find(x)!=rc.end())dfs2(rc[x]);
return ;
}
void dfs3(int x){
if(lc.find(x)!=lc.end())dfs3(lc[x]);
if(rc.find(x)!=rc.end())dfs3(rc[x]);
cout<<x<<" ";
return ;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
while(cin>>a>>b>>c){
if(b!=0){
st[b]=true;
lc[a]=b;
}
if(c!=0){
st[c]=true;
rc[a]=c;
}
}
for(int i=1;i<=n;i++){
if(!st[i])root=i;
}
cout<<root<<endl;
dfs1(root);
cout<<endl;
dfs2(root);
cout<<endl;
dfs3(root);
return 0;
}
Q8:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
string m, n;
void fun(string a, string b) {
int t = b.find(a[0]);
if (t != 0)
fun(a.substr(1, t), b.substr(0, t));
if (b.size() > t + 1)
fun(a.substr(t + 1), b.substr(t + 1));
cout << a[0];
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
while (cin >> m >> n) {
fun(m, n);
cout << endl;
}
return 0;
}
Q9:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
map<int,set<int>> mp;
int a,b;
int root;
int n;
map<int,int> deep;
int maxd;
void dfs(int x,int fa,int d){
deep[d]++;
maxd=max(maxd,d);
if(mp[x].size()==1)return ;
for(auto i:mp[x]){
if(i!=fa){
dfs(i,x,d+1);
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>root;
for(int i=1;i<=n-1;i++){
cin>>a>>b;
mp[a].insert(b);
mp[b].insert(a);
}
dfs(root,0,1);
for(auto i:deep){
if(i.first!=maxd){
if(i.second!=pow(2,i.first-1)){
cout<<"no"<<endl;
return 0;
}
}
}
cout<<"yes"<<endl;
return 0;
}
Q10:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
string s;
int n;
map<char,char> lc;
map<char,char> rc;
int num=1;
void build(char x){
if(num+1<=n&&s[num+1]!='.'){
num++;
lc[x]=s[num];
build(s[num]);
}
else if(num+1<=n&&s[num+1]=='.'){
num++;
}
if(num+1<=n&&s[num+1]!='.'){
num++;
rc[x]=s[num];
build(s[num]);
}
else if(num+1<=n&&s[num+1]=='.'){
num++;
}
return ;
}
void dfs3(char x){
if(lc.find(x)!=lc.end())dfs3(lc[x]);
if(rc.find(x)!=rc.end())dfs3(rc[x]);
cout<<x;
return ;
}
void dfs2(char x){
if(lc.find(x)!=lc.end())dfs2(lc[x]);
cout<<x;
if(rc.find(x)!=rc.end())dfs2(rc[x]);
return ;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>s;n=s.size();
s=" "+s;
build(s[1]);
dfs2(s[1]);
cout<<endl;
dfs3(s[1]);
return 0;
}
Q11:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
int n;int e;
vector<PII> v;
map<PII,PII> lc;
map<PII,PII> rc;
PII root;
string ans;
map<int,string> ot;
void dfs(PII x){
if(lc.find(x)==lc.end()&&rc.find(x)==rc.end()){
ot[x.first]=ans;
return ;
}
ans+="1";
dfs(lc[x]);
ans.pop_back();
ans+="0";
dfs(rc[x]);
ans.pop_back();
}
bool cmp(PII x,PII y){
if(x.second!=y.second)return x.second>y.second;
else return x.first<y.first;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>e;
v.pb({i,e});
}
while(v.size()>1){
sort(v.begin(),v.end(),cmp);
PII a=v.back();v.pop_back();
PII b=v.back();v.pop_back();
lc[{0,a.second+b.second}]=a;
rc[{0,a.second+b.second}]=b;
v.pb({0,a.second+b.second});
root={0,a.second+b.second};
}
dfs(root);
for(auto i:ot){
cout<<i.second<<endl;
}
return 0;
}
Q12:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
string s;
int tag;
int p[N];
int num=1;
bool key=false;
void build(){
int i=0;
while(i<s.size()){
if(s[i]=='#'){
p[num++]=-1;
i++;
}
else if(s[i]>='0'&&s[i]<='9'){
int e=0;
while(s[i]>='0'&&s[i]<='9'){
e=e*10+(s[i]-'0');
i++;
}
p[num++]=e;
e=0;
}
else i++;
}
num--;
}
void dfs(int x,int l){
l+=p[x];
if(2*x>num){
if(tag==l)key=true;
return ;
}
if(tag<l)return ;
if(p[2*x]!=-1)dfs(2*x,l);
if(p[2*x+1]!=-1)dfs(2*x+1,l);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
getline(cin,s);
cin>>tag;
build();
dfs(1,0);
cout<<(key ? "true" : "false")<<endl;
return 0;
}
Q13:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
string s;
int p[N];
map<int,int> mp;
int num=1;
void build(){
int i=0;
while(i<s.size()){
if(s[i]=='#'){
p[num++]=-1;
i++;
}
else if(s[i]>='0'&&s[i]<='9'){
int e=0;
while(s[i]>='0'&&s[i]<='9'){
e=e*10+(s[i]-'0');
i++;
}
p[num++]=e;
e=0;
}
else i++;
}
num--;
}
void dfs(int x,int deep){
mp[deep]++;
if(2*x>num){
return ;
}
if(p[2*x]!=-1)dfs(2*x,deep+1);
if(p[2*x+1]!=-1)dfs(2*x+1,deep+1);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
getline(cin,s);
build();
dfs(1,1);
int ans=-1;
for(auto i:mp){
ans=max(ans,i.second);
}
cout<<ans<<endl;
return 0;
}
Q14:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
string s;
int p[N];
map<int,int> mp;
int num=1;
int ans=-1;
void build(){
int i=0;
while(i<s.size()){
if(s[i]=='#'){
p[num++]=-1;
i++;
}
else if(s[i]>='0'&&s[i]<='9'){
int e=0;
while(s[i]>='0'&&s[i]<='9'){
e=e*10+(s[i]-'0');
i++;
}
p[num++]=e;
e=0;
}
else i++;
}
num--;
}
void dfs(int x,int deep){
if(2*x>num){
ans=max(ans,deep);
return ;
}
if(p[2*x]!=-1)dfs(2*x,deep+1);
if(p[2*x+1]!=-1)dfs(2*x+1,deep+1);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
getline(cin,s);
build();
dfs(1,0);
cout<<ans<<endl;
return 0;
}
Q15:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
#define fast() ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef pair<long long, long long> PLL;
typedef priority_queue<int> PQ;
const int N = 1005, MAX = 1e9, INF = -1e9;
int n,m;
int g[N][N];
int a,b;
void floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
g[i][j]=min(g[i][k]+g[k][j],g[i][j]);
}
}
}
}
void solve(){
memset(g,0x3f,sizeof g);
for(int i=1;i<=m;i++){
cin>>a>>b;
g[a][b]=1;
g[b][a]=1;
}
floyd();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(g[i][j]>=0x3f){
cout<<"NO"<<endl;
return ;
}
}
}
cout<<"YES"<<endl;
return ;
}
signed main()
{
fast();
while(cin>>n>>m){
if(n==0&&m==0)return 0;
else solve();
}
return 0;
}
Q16:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<double,double> PII;
typedef priority_queue<int> PQ;
const int N = 1005, MAX = 1e9, INF = -1e9;
int n,m;
int a,b;
int s,t;
vector<PII> v(N);
double g[N][N];
void floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
g[i][j]=min(g[i][k]+g[k][j],g[i][j]);
}
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
g[i][j]=10000000.0;
}
}
for(int i=1;i<=n;i++){
cin>>v[i].first>>v[i].second;
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>a>>b;
double l=sqrt((v[a].first-v[b].first)*(v[a].first-v[b].first)+(v[a].second-v[b].second)*(v[a].second-v[b].second));
g[a][b]=l;
g[b][a]=l;
}
floyd();
cin>>s>>t;
printf("%.2lf",g[s][t]);
return 0;
}
Q17:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<double,double> PII;
typedef priority_queue<int> PQ;
const int N = 1005, MAX = 1e9, INF = 1e9;
int n,e;
int g[N][N];
int a,b,c;
int dist[N];
bool st[N];
int prim(int x) {
memset(dist, 0x3f, sizeof dist);
memset(st,false,sizeof st);
int res = 0;
dist[x]=0;
for(int i = 0; i < n; i++) {
int t = -1;
for(int j = 1; j <= n; j++)
if(!st[j] && (t == -1 || dist[t] > dist[j]))
t = j;
res += dist[t];
st[t] = true;
for(int j = 1; j <= n; j++) dist[j] = min(dist[j], g[t][j]);
}
return res;
}
void floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
g[i][j]=min(g[i][k]+g[k][j],g[i][j]);
}
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
memset(g,0x3f,sizeof g);
cin>>n>>e;
for(int i=1;i<=e;i++){
cin>>a>>b>>c;
a++;b++;
g[a][b]=min(g[a][b],c);
}
for(int i=1;i<=n;i++){
g[i][i]=0;
}
floyd();
int ans1=0;int d=MAX;
for(int i=1;i<=n;i++){
int d0=-1;bool key=false;
for(int j=1;j<=n;j++){
if(j!=i&&g[j][i]<0x3f){
d0=max(d0,g[j][i]);key=true;
}
}
if(d0<d&&key){
ans1=i;d=d0;
}
}
int ans2=MAX;
for(int i=1;i<=n;i++){
ans2=min(ans2,prim(i));
}
cout<<ans1-1<<" "<<ans2<<endl;
return 0;
}
Q18:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 100, MAX = 1e9, INF = -1e9;
int const inf=0x3f3f3f;
int n,v;
int f[N][N];
void floyd(){
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
scanf("%d%d",&n,&v);
memset(f,inf,sizeof(f));
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++) {
int a;
if(scanf("%d",&a)) f[i][j]=a;
else f[i][j]=inf;
}
floyd();
for(int i=1; i<=n; i++)
if(i!=v)
printf("(%d -> %d) = %d\n",v,i,f[v][i]);
return 0;
}
Q19:
#include<bits/stdc++.h>
#define endl '\n'
#define int int long long
#define pb push_back
#define bs bitset
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef priority_queue<int> PQ;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
inline void read(int &x){
char c=getchar();
int p=1;
x=0;
while(!isdigit(c)){
if(c=='-')p=-1;
c=getchar();
}
while(isdigit(c)){
x=(x<<1)+(x<<3)+(c^'0');
c=getchar();
}
x*=p;
}
const int maxn=1000;
int head[maxn],tot,n,deep[maxn],sz[maxn],pre[maxn],ans,dis[maxn];
struct edge{
int to,next;
}e[maxn<<1];
inline void add(int u,int v){
e[++tot].to=v;
e[tot].next=head[u];
head[u]=tot;
}
inline void dfs(int rt,int fa){
deep[rt]=deep[fa]+1;
for(register int i=head[rt];i;i=e[i].next){
if(e[i].to==fa)continue;
dfs(e[i].to,rt);
pre[rt]+=pre[e[i].to];
}
}
inline void dp(int rt,int fa){
for(register int i=head[rt];i;i=e[i].next){
if(e[i].to==fa)continue;
dis[e[i].to]=dis[rt]+pre[1]-pre[e[i].to]-pre[e[i].to];
if(dis[e[i].to]<ans)ans=dis[e[i].to];
dp(e[i].to,rt);
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
read(n);
for(register int i=1;i<=n;++i){
int a,b;
read(sz[i]);read(a);read(b);
pre[i]=sz[i];
if(a){
add(i,a);
add(a,i);
}
if(b){
add(i,b);
add(b,i);
}
}
deep[0]=0;
dfs(1,0);
for(register int i=1;i<=n;++i){
dis[1]+=(deep[i]-1)*sz[i];
}
ans=dis[1];
dp(1,0);
cout<<ans<<endl;
return 0;
}