相邻两个种类不同,直接m*(m-1)*(m-1)。。。。n-1次即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1000000000+7;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int i,j;
bool f=0;
ll ans=m;
for(i=1;i<n;i++)
{
ans=(ans*(m-1))%mod;
}
printf("%lld\n",ans);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int fa[1000100],num[1000100];
int Find(int x)
{
return fa[x]==-1?x:fa[x]=Find(fa[x]);
}
void Bond(int x,int y)
{
int fx=Find(x);
int fy=Find(y);
if(fx!=fy)
fa[fx]=fy;
}
int main()
{
int n,i,j;
memset(fa,-1,sizeof(fa));
scanf("%d",&n);
for(i=1;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(x!=1&&y!=1)
Bond(x,y);
}
int ans=0;
for(i=1;i<=n;i++)
++num[Find(i)];
for(i=1;i<=n;i++)
ans=max(ans,num[i]);
printf("%d\n",ans);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000010;
int cntR[N],cntB[N];
int main()
{
int n,m,i;
string s;
scanf("%d%d",&n,&m);
cin>>s;
int cnt1=0,cnt2=0;
for(i=0;i<s.length();i++)
{
if(s[i]=='B')
cntB[++cnt1]=(i+1);
else
cntR[++cnt2]=(i+1);
}
while(m--)
{
char ch;
int x;
cin>>ch>>x;
if(ch=='B')
{
if(x>cnt1)
printf("-1\n");
else
printf("%d\n",cntB[x]);
}
else
{
if(x>cnt2)
printf("-1\n");
else
printf("%d\n",cntR[x]);
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int dis[50050];
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=1;i<n;i++)
{
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
dis[x]=dis[y]+w;
}
int ans=-1;
for(i=1;i<=n;i++)
ans=max(ans,dis[i]);
printf("%d\n",ans);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=333;;
int ans[N],dis[N];
bool vis[N];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int i,j,t;
for(i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
dis[x]=y;
}
queue<int>q;
q.push(0);
memset(ans,0x3f3f3f3f,sizeof(ans));
ans[0]=0;
while(!q.empty())
{
t=q.front();
q.pop();
if(t+1<=n&&!vis[t+1])
{
q.push(t+1);
vis[t+1]=1;
ans[t+1]=min(ans[t+1],ans[t]+1);
}
if(t-1>=0&&!vis[t-1])
{
q.push(t-1);
vis[t-1]=1;
ans[t-1]=min(ans[t-1],ans[t]+1);
}
if(dis[t]&&!vis[dis[t]])
{
q.push(dis[t]);
vis[dis[t]]=1;
ans[dis[t]]=min(ans[dis[t]],ans[t]+1);
}
}
printf("%d\n",ans[n]);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=100100;
const int mod=19260817;
int f[N];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
f[0]=1;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
for(int j=x;j<=m;j++)
{
f[j]+=f[j-x];
if(f[j]>mod)
f[j]-=mod;
}
}
int ans=0;
for(int i=1;i<=m;i++)
{
ans=(ans+f[i])%mod;
}
printf("%d\n",ans);
return 0;
}