魯迅:這可是道難題呢!
魯迅:我沒說過這話,不過確實在理。
某改題畢,但見LOJ之上有數「A+B」之AC記錄。余亦嘗聞A+B之趣味無窮,遂興起而碼之。
少頃,AC之,吾心所暢。

#include<iostream> #include<cstdio> #include<algorithm> #define rint register int using namespace std; int a,b,tot,first[12],cnt,ans=0,fa[12]; struct node{int u,v,w,nxt;}edge[12]; inline bool cmp(node uu,node vv){return uu.w<vv.w;} inline void add(int uu,int vv,int ww) { edge[++tot]=(node){uu,vv,ww,first[uu]}; first[uu]=tot; } inline int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);} inline void kruskal() { int sum=0; sort(edge+1,edge+tot+1,cmp); for(rint i=1;i<=cnt;++i)fa[i]=i; for(rint i=1;i<=tot;++i) { int x=find(edge[i].u),y=find(edge[i].v); if(x!=y) { fa[y]=x;sum++; ans+=edge[i].w; } if(sum==cnt-1)return ; } } int main() { scanf("%d %d",&a,&b); cnt=3;add(1,2,a),add(2,1,a); add(3,2,b),add(2,3,b); kruskal(); cout<<ans<<endl; return 0; }

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define rint register int using namespace std; int a,b,tot,first[12],cnt,ans=0; int dist[12]; bool vis[12]; struct node{int u,v,w,nxt;}edge[12]; inline void add(int uu,int vv,int ww) { edge[++tot]=(node){uu,vv,ww,first[uu]}; first[uu]=tot; } inline void dijkstra(int x) { memset(dist,0x7f,sizeof(dist)); dist[x]=0; for(rint i=1;i<cnt;++i) { int k=0; for(rint j=1;j<=cnt;++j) if(!vis[j]&&(k==0||dist[j]<dist[k])) k=j; vis[k]=1; for(rint j=first[k];j;j=edge[j].nxt) { int y=edge[j].v; dist[y]=min(dist[y],edge[j].w+dist[k]); } } return ; } int main() { scanf("%d %d",&a,&b); cnt=3;add(1,2,a),add(2,3,b); dijkstra(1); cout<<dist[3]<<endl; return 0; }

#include<iostream> #include<cstdio> #include<algorithm> #define rint register int using namespace std; int a,b,l,r; int main() { l=1,r=100000000; scanf("%d %d",&a,&b); while(l<=r) { int mid=(l+r)>>1; if(a+b>mid)l=mid+1; else r=mid-1; } cout<<l<<endl; return 0; }