标签:rem while namespace ios art sdn const relevant style
https://blog.csdn.net/azuremayfly/article/details/52278272
https://blog.csdn.net/Mr_wuyongcong/article/details/86624067?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/Gx_Man_VIP/article/details/86632133?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
两种写法一种背包,一种记搜 记搜的一直调不出 与之前树形dp几题类似 记搜更快?n2?
由于取的是1的祖先,记搜时可以k+1开始搜
#include<bits/stdc++.h> using namespace std; const int N=105; int tot,a[N],head[N],d[N],f[N][N],vis[N][N],k; struct E{ int v,next; }e[N]; void add(int u,int v){ e[++tot].v=v; e[tot].next=head[u]; head[u]=tot; } void dfs(int x){ d[x]=1; for(int i=head[x];i;i=e[i].next){ dfs(e[i].v); d[x]+=d[e[i].v]; } } /*int solve(int x,int y){ if(y==0)return 0; if(y==1)return a[x]; if(vis[x][y])return f[x][y]; int u1=e[head[x]].v,u2=e[e[head[x]].next].v; // cout<<x<<‘ ‘<<u1<<‘ ‘<<u2<<endl; if(u1==0&&u2==0){ f[x][y]=a[x]; vis[x][y]=1; return f[x][y]; } if(u1==0){ f[x][y]=solve(u2,y-1)+a[x]; vis[x][y]=1; return f[x][y]; } if(u2==0){ f[x][y]=solve(u1,y-1)+a[x]; vis[x][y]=1; return f[x][y]; } //f[x][y]=max(solve(u1,y-1),solve(u2,y-1)); for(int i=0;i<y;i++) if(i<=d[u1]&&y-1-i<=d[u2]){ f[x][y]=max(f[x][y],solve(u1,i)+solve(u2,y-1-i));} f[x][y]+=a[x]; vis[x][y]=1; // cout<<x<<‘ ‘<<y<<f[x][y]<<endl; return f[x][y]; }*/ void dp(int x){ if(x!=1) f[x][1]=a[x]; else f[x][0]=0; for(int i=head[x];i;i=e[i].next){ int v=e[i].v; dp(v); for(int i=k;i>=1;i--) for(int j=1;j<=k;j++) if(i-j<0) break; else f[x][i]=max(f[x][i],f[x][i-j]+f[v][j]); } return; } int main(){ int n; cin>>n>>k; for(int i=1;i<=n;i++) for(int j=0;j<=k;j++)f[i][j]=-1e9;//必须得初始化 for(int i=2;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++){ int x,y; cin>>x>>y; if(x)add(i,x); if(y)add(i,y); } dp(1); cout<<f[1][k]; /* for(int i=1;i<=n;i++) for(int j=0;j<=min(k+1,d[i]);j++) cout<<i<<‘ ‘<<j<<‘ ‘<<f[i][j]<<endl;*/ }
将坐标转化为数
https://www.cnblogs.com/moyujiang/p/11167794.html
https://blog.csdn.net/ebirth/article/details/90728623
https://blog.csdn.net/hwzzyr/article/details/71083404
#include<bits/stdc++.h> using namespace std; const int N=1e6+5; int fa[N],n,m; int convert(int x,int y) { return x*m+y-m; } void init() { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { int con=convert(i,j); fa[con]=con; } } int get(int x) { while(x!=fa[x])x=fa[x]=fa[fa[x]]; return x; } bool merge(int x,int y) { int r1=get(x); int r2=get(y); if(r1==r2)return 0; else fa[r1]=r2; return 1; } int main() { cin>>n>>m; init(); int a,b,c,d,ans=0; while(cin>>a>>b>>c>>d){ int flag=merge(convert(a,b),convert(c,d)); } for(int j=1;j<=m;j++) for(int i=1;i+1<=n;i++) if(merge(convert(i,j),convert(i+1,j)))ans++; for(int i=1;i<=n;i++) for(int j=1;j+1<=m;j++) if(merge(convert(i,j),convert(i,j+1)))ans+=2; cout<<ans<<endl; return 0; }
关了同步流 不用scanf还是t
pair用法 以及auto &引用?
以及颜色循环的问题
链式前向星连图tot从1开始 这样id>>1就是对应边的序号的 跟tarjan边双的时候类似
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; vector<pair<int,int> >g[N]; int ans[N],tot,vis[N]; void dfs(int x,int pre){ vis[x]=1; // if(x==1)tot=max(tot,(int)g[x].size()); // else tot=max(tot,(int)g[x].size()); int cur=0; for(auto& u:g[x]){ int v=u.first,id=u.second; if(vis[v])continue; ++cur; if(cur==pre)cur++; ans[id]=cur; dfs(v,cur); } } int main(){ int n; // ios::sync_with_stdio(false);cin.tie(0); scanf("%d",&n); for(int i=1;i<n;i++){ int x,y; // cin>>x>>y; scanf("%d%d",&x,&y); // g[x].push_back({y,i}); // g[y].push_back({x,i}); g[x].push_back(make_pair(y,i)); g[y].push_back(make_pair(x,i)); } for(int i=1;i<=n;i++)tot=max(tot,(int)g[i].size()); dfs(1,0); printf("%d\n",tot); for(int i=1;i<n;i++)printf("%d\n",ans[i]); }
https://blog.csdn.net/qq_43408238/article/details/103230117
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; if(s=="SUN")cout<<7; else if(s=="MON")cout<<6<<endl; else if(s=="TUE")cout<<5<<endl; else if(s=="WED")cout<<4<<endl; else if(s=="THU")cout<<3<<endl; else if(s=="FRI")cout<<2<<endl; else cout<<1<<endl; }
#include<bits/stdc++.h> using namespace std; const int N=1e4+5; char s[N]; map<char,char>mp; int main(){ int n; cin>>n; cin>>s; for(char i=‘A‘;i<=‘Z‘;i++)mp[i]=(i-65+n)%26+65; int l=strlen(s); for(int i=0;i<l;i++)putchar(mp[s[i]]); return 0; }
可以二分?
#include<bits/stdc++.h> #define ll long long using namespace std; int main(){ ll a,b,x,ans=0; cin>>a>>b>>x; if(a*pow(10,9)+10*b<=x){ cout<<(int)pow(10,9);return 0; } for(int i=9;i;i--){ if(x-i*b>0&&(x-i*b)/a>=pow(10,i-1)) { if(a*(pow(10,i)-1)+i*b<=x)ans=pow(10,i)-1; else ans=(x-i*b)/a;//%a cout<<ans<<endl; return 0; } } cout<<0<<endl; }
#include<bits/stdc++.h> using namespace std; const int N=1e3+5; struct P{ int x,y; }a[N]; int main(){ int n; cin>>n; int ans=0; for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y; for(int i=1;i<=n;i++){ int r=0,flag=0; for(int j=1;j<=n;j++){ if(i==j)continue; if(!r)r=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y); else if((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)!=r){ flag=1; break;} } if(!flag){ans=i;break;}//没判flag } cout<<ans<<endl; }
标签:rem while namespace ios art sdn const relevant style
原文地址:https://www.cnblogs.com/wyh447154317/p/12513219.html